TypeScript中能否对自定义联合类型用Pick提取指定子集类型?
TypeScript 联合类型子集筛选方案
错误原因说明
Pick<T, K>是针对对象类型设计的工具类型,仅支持从对象结构中选取指定属性构造新对象类型,无法直接作用于字符串联合类型,因此你的原有写法无法生效。
正确实现方式
使用 TypeScript 内置的 Extract<T, U> 工具类型即可实现需求,该类型专门用于从联合类型 T 中提取可赋值给 U 的成员,构造新的联合类型:
type Fruit = 'apple' | 'orange' | 'banana' | 'grapefruit'; type CitrusFruit = Extract<Fruit, 'orange' | 'grapefruit'>;
最终 CitrusFruit 的类型等价于 'orange' | 'grapefruit',完全匹配需求。
如果你的筛选逻辑是排除指定成员,也可以使用对应的 Exclude<T, U> 工具类型实现,示例如下:
// 排除Fruit中非柑橘类的成员,得到相同结果 type CitrusFruit = Exclude<Fruit, 'apple' | 'banana'>;
内容的提问来源于stack exchange,提问作者Cog
相关产品推荐
相关产品推荐

