Тип 'State' не удовлетворяет ограничению '(state: any, ... args: any []) => any' - PullRequest
1 голос
/ 28 октября 2019

Это, вероятно, нубистский вопрос, но как мне справиться с ошибкой Typescript TS2344?

Тип 'State' не удовлетворяет ограничению '(state: any, ... args:any []) => any '.

Вот кодовый код моего 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.

РЕДАКТИРОВАТЬ: getPageFull определяется в selectors.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 Ответ

1 голос
/ 29 октября 2019

Сигнатура 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))
...