假设有一个 TypeScript 的类型是:
interface Example {
str: string;
num: number;
func1: (param1: string, param2: number) => null;
func2: () => void;
}
以下这个 TypeScript 的定义,可以用于将 T
中函数的部分抽离出来,形成新的类型:
type Pick<T, K extends keyof T> = {
[P in K]: T[P];
};
type FunctionPropertyNames<T> = {
[K in keyof T]: T[K] extends Function ? K : never;
}[keyof T];
最终,新类型的定义如下:
type Result = Pick<Example, FunctionPropertyNames<Example>>;
等价于:
interface Equivalent {
func1: (param1: string, param2: number) => null;
func2: () => void;
}