实现一个 ts 的工具函数 GetOnlyFnProps<T> ,提取泛型类型 T 中字段类型是函数的工具函数,其中 T 属于一个对象。
// 答案
type GetOnlyFnKeys<T extends object> = {
[K in keyof T]: T[K] extends Function ? K : never
}[keyof T] // 不太理解这个地方
type GetOnlyFnProps<T extends object> = {
[K in GetOnlyFnKeys<T>]: T[K]
}
// 测试用例
// 除了函数类型,其他都删除了
type obj = {
a: () => string,
b: number
}
type ccc = GetOnlyFnProps<obj>
let value:ccc = {
a: () => '1'
}
1
seki 2021-03-04 00:21:09 +08:00
T[K] extends Function ? K : never 是指如果 T[K] 不是 Function 的话,那类型就是 K,否则就是 never
{ [K in keyof T]: T[K] extends Function ? K : never } 相当于排除掉了值类型不是 function 的,并且现在新的值是 K 再用 [keyof T] 取一下,拿到的就是 K 了 这种题你用实际的代码去类比比较合适,同时我觉得考 TypeScript 考这种和考茴的写法没什么区别,太专注于类型魔法了 |
2
yazoox 2021-03-04 09:23:58 +08:00
感觉像是三年高考五年模拟……
这类用法平时很少见,碰到了,学习研究一下就懂了。但是,过了一个礼拜,就忘了(可能我年纪大了吧……)。这面试和高考差不多了,这个知识点靠前要是没复习到,就 GG |