redux-observable epic打字稿警告:'store'已声明但其值永远不会被读取

时间:2018-01-30 01:42:42

标签: typescript redux redux-observable redux-store

我有一个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))
            )

一切正常,测试很棒,但在编译 typescript 代码时,我收到以下警告

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

如何解决此问题

2 个答案:

答案 0 :(得分:3)

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

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

这是有效的,因为TypeScript编译器明确地将此约定添加为linting规则的例外。它完全针对这些案例。

答案 1 :(得分: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变量。