跳到主要内容

工具类型之Extract

Extract<T, U>

尝试从T类型的成员中寻找和U类型成员的交集,并将其作为新类型返回(与Exclude相反)

当我们想要定义一个:原始联合类型与特定变量的交集时可以使用它

示例代码

假设现有类型定义中定义了一个联合类型

type ExtractType = '喵喵' | '汪汪' | '喵呜' | '咩咩'
const ExtractCat: ExtractType = '喵喵'

使用Extract创建一个新的类型:

type ExtractCatType = '喵喵'
let ExtractPet: Extract<ExtractCatType, '喵呜'> = '喵喵'

因为这两个类型定义不会出现交集,所以它的值必不符号条件,此时编译时会抛出错误:Type 'string' is not assignable to type 'never'.ts(2322)

image.png

正确(不报错)的写法应该是:

type ExtractCatType = '喵喵'
type ExtractPetsType = '汪汪'|'喵喵'
let ExtractPet2: Extract<ExtractCatType, ExtractPetsType> = '喵喵' // 通过
let ExtractPet3: Extract<ExtractCatType|'喵呜', ExtractPetsType> = '咩咩' // Type '"咩咩"' is not assignable to type '"喵喵"'.ts(2322)