简短说明:此用法获取所有属性的所有值类型。
首先,[]
通过使用一个(或多个)键访问该类型来深入了解该类型之后
type A = { foo: string }
type B = A['foo'] // string
其次,这里有一个映射类型。这意味着它是一种映射某种类型的所有键、转换它,然后返回一个新类型的类型。
那么让我们先看看这一部分:
type StripNonMethods<T> = {
[K in keyof T]: T[K] extends Function ? K : never;
}
任何T
是,这将为所有键创建一个类型T
其中每个属性的值是属性的名称(如果该值是函数)或never
(如果它不是一个函数)。
这将改变这一点:
type T1 = { a(): void, b: number }
into:
type T2 = StripNonMethods<T1> // { a: 'a', b: never }
但这里想要的结果是字符串'a'
,因为我们试图获取所有属于函数的属性名称。因此,我们使用它自己的键深入研究该类型,它将所有属性的所有值作为并集返回[keyof T]
在最后。
现在将返回:
type T3 = T2[keyof T2] // 'a' | never
并且因为never
根据定义,它永远不会存在,它是从联合中简化出来的,你会得到:
'a'
操场