【问题标题】:How to fix redux-observable Parameter 'action$' implicitly has an 'any' type如何修复 redux-observable 参数'action$'隐式具有'any'类型
【发布时间】:2019-06-28 05:46:06
【问题描述】:

我正在尝试实现 TS 史诗功能,但“action$”需要有一些不同的隐式类型,我找不到此类功能的工作示例...

我制作的函数可以正常工作,但我无法修复任何类型的 TS 错误。

export const fetchSettingsEpic = action$ => action$.pipe(
  ofType(types.UPDATE_INITIAL_SETTINGS),
  mergeMap(action =>
    ajax.getJSON(url).pipe(
      map((response: Settings) => 
actions.updateInitialSuccess(response)),
      catchError(error => of(actions.updateInitialError(error))),
    ),
  ),
);

函数很简单,但我该如何解决“参数'action$'隐含的'any'类型。”错误?

重要!点告诉我关闭“noImplicitAny”:true,或者不要检查这部分代码)

【问题讨论】:

  • 你在用typesafe-actions吗?
  • 我试过了,但如果没有其他类型错误,它就无法工作......

标签: reactjs typescript redux-observable


【解决方案1】:

不要关闭noImplicityAny。你是对的,你不应该!

你应该做的是,声明参数的类型,即ActionsObservable<T>。其中 T 应该是操作的类型。

例子:

export enum SettingsActionTypes {
   FETCH: "settings/fetch",
   FETCH_SUCCESS: "settings/fetchSuccess"
}

export function fetch(): IFetchAction {
   return {
       type: SettingsActionTypes.FETCH
   };
}

export interface IFetchAction {
   type: SettingsActionTypes.FETCH;
}

export interface IFetchSuccessAction {
   type: SettingsActionTypes.FETCH_SUCCESS;
}

export type SettingsAction = IFetchAction | IFetchSuccessAction;

然后在你的史诗中,你可以这样写:

import {
   ActionsObservable,
   StateObservable
} from 'redux-observable';

export const fetchSettingsEpic = (action$: ActionsObservable<SettingsAction>) =>
      action$.ofType(SettingsActionTypes.FETCH).mergeMap(...do your stuff here...)

另外,如果您需要访问史诗中的状态,您可能必须使用类型为 StatesObservable&lt;T&gt; 的第二个参数 state$。其中 T 是定义整个 redux 状态结构的接口。

【讨论】:

    猜你喜欢
    • 2021-05-31
    • 2018-09-23
    • 2018-09-25
    • 2017-11-30
    • 2021-12-24
    • 2017-04-07
    • 2019-03-15
    • 1970-01-01
    • 2022-07-04
    相关资源
    最近更新 更多