将typescript ReturnType与keyof和通用类型的迭代键一起使用

时间:2018-12-19 16:42:28

标签: typescript return-type keyof

我试图遍历对象中的函数并获取它们的返回类型以进行一些过滤,如下所示:

 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 :(得分:2)

您需要指定约束,使得T中的ValidFunctions的值只能是函数:

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