将打字稿 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 }> = ...
我正在尝试遍历对象中的函数并获取它们的 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 }> = ...