TypeScript如何从已有类型的可选属性构造全必选的新类型
实现方案
可以通过 TypeScript 内置工具类配合自定义的可选键提取类型实现:
- 先定义通用的可选属性键提取类型
type OptionalKeys<T> = { [K in keyof T]-?: {} extends Pick<T, K> ? K : never }[keyof T]
该类型的逻辑是遍历目标类型的所有属性,判断属性是否为可选:如果单独提取该属性组成的类型兼容空对象,说明该属性为可选,会保留对应的键,否则会被过滤。
2. 组合内置工具类构造目标类型Bar
// 你的原始类型定义 interface Foo { prop1: string, prop2: number, prop3?: boolean, prop4?: object } // 最终构造的Bar类型 type Bar = Required<Pick<Foo, OptionalKeys<Foo>>>
构造完成的Bar和你预期的效果完全一致,等价于:
interface Bar { prop3: boolean, prop4: object }
内容的提问来源于stack exchange,提问作者Julian Lachniet
相关产品推荐
相关产品推荐

