设计工具类型(重要)
interface Part {
id: number;
name: string;
subparts: Part[];
updatePart(newName: string): void;
}
type R = FunctionPropertyNames<Part>;设计结果:
type FunctionPropertyNames<T> = { [K in keyof T]: T[K] extends Function ? K : never }[keyof T]结题思路
假设我们把
Part代入泛型T,[K in keyof T]相当于遍历整个interface这时
K相当于interface的key,T[K]相当于interface的value接下来,用条件类型验证value的类型,如果是
Function那么将value作为新interface的key保留下来,否则为never到这里我们得到了遍历修改后的新interface即:
type R = {
id: never;
name: never;
subparts: never;
updatePart: "updatePart";
}但是我们的的要求是取出老interface Part的key,这个时候再次用[keyof T]作为key依次取出新interface的value,但是由于id name和subparts的value为never就不会返回任何类型了,所以只返回了'updatePart'.
最后更新于
这有帮助吗?