TypeScript:Pick工具类型能否用于联合类型而非仅接口?
问题解答:Pick工具类型与联合类型的使用误区
你遇到的错误和Pick是否适用于类型无关,核心问题是用错了Pick的适用场景:
Pick<T, K> 是专门用来从对象类型中挑选指定属性的工具类型,它的第一个参数T必须是对象类型(比如interface或者对象结构的type),但你传入的MyType是字符串字面量联合类型,不符合这个约束,才会触发type doesn't satisfy the constraint错误。
如果要从联合类型中筛选部分成员,不需要用Pick,有两种简单的解决方式:
- 直接显式声明需要的联合类型:
interface MyInterface { selection: 'something' | 'another'; }
- 使用
Extract工具类型(TypeScript专门提供的、用于从联合类型中提取指定成员的工具):
export type MyType = 'something' | 'another' | 'else'; interface MyInterface { selection: Extract<MyType, 'something' | 'another'>; }
顺便补充:Pick完全可以用于类型,只要第一个参数是对象类型就行,比如:
type User = { name: string; age: number; email: string }; type UserBasicInfo = Pick<User, 'name' | 'age'>; // 正确提取对象类型的属性
内容的提问来源于stack exchange,提问作者sir-haver
相关产品推荐
相关产品推荐

