type FunctionPropertyNames<T> = { [K in keyof T]: T[K] extends Function ? K : never }[keyof T];
这段后面跟的[keyof T]
是什么意思呢?
type BoxedValue<T> = { value: T };
type BoxedArray<T> = { array: T[] };
type Boxed<T> = T extends any[] ? BoxedArray<T[number]> : BoxedValue<T>;
这段最后的BoxedArray<T[number]>
中的T[number]
是什么意思呢?
这两个问题都是映射类型的知识:
[keyof T]
:[keyof T]
前面是一个对象,[]
表示索引,keyof T
表示索引值是类型T
的key
值,可以去查看一下keyof
关键字用法T[number]
:首先看前面,T extends any[]
表示T
是any[]
的继承类型,所以T
的索引是数字,所以才有T[number]
。也就是T
是数组时,包装的是数组的元素,T
不是数组时,包装的就是值本身