类型'State'不满足约束'(state:any,... args:any [])=> any'

时间:2019-10-28 17:58:01

标签: reactjs typescript redux-saga

这可能是一个讨厌的问题,但是如何处理Typescript错误TS2344?

  

类型'状态'不满足约束'(状态:任何,... args:任何[])=>任何'。

这是我的sagas.ts发生错误的代码片段

function* loadPageFull(action: Actions.LoadPageFullAction ) {
    if (!action.id)
        return;
    const currentPageFull: Interfaces.PageFull = 
      yield (select<Top.State>(Selectors.getPageFull(action.id))); // <-- error occurs here

    if (!currentPageFull || action.forceReload) {
        // here we query the API of the backend and return some JSON
    }
}

问题似乎出在与Top.State所在的行中的yield。奇怪的是,在将Typescript更新到版本3.6.4之前,我没有出现错误。

编辑getPageFullselectors.ts中定义为

const getPageFullInner = (state: State, id: number) => state.pagesFull.get(id);
export const getPageFull = (id: number) => (state: Top.State) 
    => getPageFullInner(foobar(state), id);

foobar()函数也在那里定义

export const foobar = (state: State) => state.foobar;

参考文献

1 个答案:

答案 0 :(得分:1)

select的签名是:

export function select<Fn extends (state: any, ...args: any[]) => any>(
  selector: Fn,
  ...args: Tail<Parameters<Fn>>
): SelectEffect

因此,第一个通用参数必须是函数类型(特别是(state: any, ...args: any[]) => any),但是您要赋予它State

您无需指定通用参数,因为可以从参数中推断出该参数,因此您只需编写以下内容即可:

select(Selectors.getPageFull(action.id))