redux-observable 史诗打字稿警告:'store' 已声明但从未读取其值
redux-observable epic typescript warning: 'store' is declared but its value is never read
我有一个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.
我该如何解决这个问题
我知道它有点脏,但我不知何故找到了解决这个问题的方法,它解决了警告。
来自代码:
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
中的任何地方使用。但是由于 函数签名 需要它,所以我只是声明一个 空 object {}
而不是 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,我可以简单地在函数参数中定义store
变量。
这是来自 TypeScript noUnusedParameters aka no-unused-variable 设置的 linting 错误。这意味着您的函数定义了 store
参数但实际上并未使用它。要修复,您可以在 store 参数前加上下划线前缀 _store
,它会忽略它,或者您可以从 tsconfig 或编译器标志中删除 linting 选项。
(action$: ActionsObservable<Action>, _store: MiddlewareAPI<RootState> , { getJSON } ): Observable<Action>
这是有效的,因为 TypeScript 编译器明确地将此约定添加为 linting 规则的例外。正是针对此类情况完成的。
我有一个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.
我该如何解决这个问题
我知道它有点脏,但我不知何故找到了解决这个问题的方法,它解决了警告。
来自代码:
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
中的任何地方使用。但是由于 函数签名 需要它,所以我只是声明一个 空 object {}
而不是 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,我可以简单地在函数参数中定义store
变量。
这是来自 TypeScript noUnusedParameters aka no-unused-variable 设置的 linting 错误。这意味着您的函数定义了 store
参数但实际上并未使用它。要修复,您可以在 store 参数前加上下划线前缀 _store
,它会忽略它,或者您可以从 tsconfig 或编译器标志中删除 linting 选项。
(action$: ActionsObservable<Action>, _store: MiddlewareAPI<RootState> , { getJSON } ): Observable<Action>
这是有效的,因为 TypeScript 编译器明确地将此约定添加为 linting 规则的例外。正是针对此类情况完成的。