工具类型之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)
正确(不报错)的写法应该是:
type ExtractCatType = '喵喵'
type ExtractPetsType = '汪汪'|'喵喵'
let ExtractPet2: Extract<ExtractCatType, ExtractPetsType> = '喵喵' // 通过
let ExtractPet3: Extract<ExtractCatType|'喵呜', ExtractPetsType> = '咩咩' // Type '"咩咩"' is not assignable to type '"喵喵"'.ts(2322)