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

Using typescript ReturnType with keyof and iterated keys of generic type

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

 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>;

以上代码会出现以下错误:

Type 'T[K]' 不满足约束 '(...args: any[]) => any'.

如错误所述,ReturnType 需要一个函数,对吗?还是我遗漏了什么?

如何告诉 ReturnType 我正在传递一个函数?

需要指定ValidFunctions里面T的值只能是函数的约束:

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