Использование typecript ReturnType с keyof и повторяющимися ключами универсального типа - PullRequest
0 голосов
/ 19 декабря 2018

Я пытаюсь перебрать функции в объекте и заставить их возвращаемый тип выполнить некоторую фильтрацию следующим образом:

 export const StorageActions = {
      addFile: () => ({ type: 'ADD_FILE' }),
      deleteFile: () => {
        return () => {
          return null;
        };
      },
    };

type StorageActionsTypes = typeof StorageActions;

type ValidFunctions<T> = Pick<T, {
  [K in keyof T]: ReturnType<T[K]> extends { type: any } ? K : never;
}[keyof T]>;

type functions = ValidFunctions<StorageActionsTypes>;

приведенный выше код выдаст следующую ошибку:

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

enter image description here

Как описано выше, ReturnType ожидает функцию, это правильно?или я что-то здесь упускаю?

как я могу сказать ReturnType, что я передаю функцию?

1 Ответ

0 голосов
/ 19 декабря 2018

Необходимо указать ограничение, что значения T внутри ValidFunctions могут быть только функциями:

type ValidFunctions<T extends { [key: string]: (...args: any[]) => any }> = ...
...