1

我有一个redux observable epic如下

export const fetchUserEpic:Epic<Action, RootState, any> = 
    (action$: ActionsObservable<Action>, store: MiddlewareAPI<RootState> , { getJSON } ): Observable<Action> => 
        action$.filter((action: Action) => action.type === actionTypes.FETCH_USER)
            .mergeMap(  (action: Action) =>
                getJSON(`/api/user/${action.payload}`)
                .map((response: any) => Actions.fetchUserSuccess(response))
            )

一切正常,测试也很棒,但是在编译打字稿代码时,我收到以下警告

semantic error TS6133 'store' is declared but its value is never read.

我该如何解决这个问题

4

2 回答 2

3

这是来自 TypeScript noUnusedParameters aka no-unused-variable 设置的 linting 错误。这意味着您的函数已store定义参数但实际上并未使用它。要解决此问题,您可以在 store 参数前加上下划线_store,它将忽略它,或者您可以从 tsconfig 或编译器标志中删除 linting 选项。

(action$: ActionsObservable<Action>, _store: MiddlewareAPI<RootState> , { getJSON } ): Observable<Action>

这是有效的,因为 TypeScript 编译器明确将此约定添加为 linting 规则的例外。正是为这类情况而做的。

于 2018-01-30T02:37:00.487 回答
0

我知道它有点脏,但我不知何故找到了解决这个问题的方法,它解决了警告。

从代码:

export const fetchUserEpic:Epic<Action, RootState, any> = 
    (action$: ActionsObservable<Action>, store: MiddlewareAPI<RootState> , { getJSON } ): Observable<Action> => 
        action$.filter((action: Action) => action.type === actionTypes.FETCH_USER)
            .mergeMap(  (action: Action) =>
                getJSON(`/api/user/${action.payload}`)
                .map((response: any) => Actions.fetchUserSuccess(response))
            )

我知道store变量没有在function. 但是由于函数签名需要它,所以我只是声明一个空对象 {}而不是store变量。

结果代码将是:

export const fetchUserEpic:Epic<Action, RootState, any> = 
    (action$: ActionsObservable<Action>, {}: MiddlewareAPI<RootState> , { getJSON } ): Observable<Action> => 
        action$.filter((action: Action) => action.type === actionTypes.FETCH_USER)
            .mergeMap(  (action: Action) =>
                getJSON(`/api/user/${action.payload}`)
                .map((response: any) => Actions.fetchUserSuccess(response))
            )

警告得到解决。如果我需要使用史诗里面的存储store,我可以简单地在函数参数中定义变量。

于 2018-01-30T02:36:15.523 回答