如何修复Redux的可观察的参数“行动$”隐含有一个“任意”类型

问题描述 投票:1回答:1

我想实现TS史诗般的功能,但“行动$”需要有不同的一些隐式类型,我无法找到这种类型的函数的工作示例...

我做了功能工作得很好,但我不能修复任何类型的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))),
    ),
  ),
);

该功能是相当简单,但如何解决“参数‘行动$’隐含有一个‘任何’类型。”错误?

重要!点告诉我关掉“noImplicitAny”:真实的,或不检查这部分代码)

reactjs typescript redux-observable
1个回答
0
投票

不要关闭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<T>。其中,T是定义你的整个终极版的结构状态的接口。

© www.soinside.com 2019 - 2024. All rights reserved.