如何以左外连接方式从TypeScript已有类型创建新对象?
TypeScript 基于已有对象创建匹配目标类型的新对象
我们可以通过几种方式实现需求,既保证类型合规,又能精准获取需要的字段:
1. 基础对象展开 + 类型断言
这是最直接的写法,通过对象展开语法复用已有对象的匹配字段,补充目标类型所需的额外字段后,用类型断言指定最终类型:
interface Person{ name: string; age: number; } interface Man{ name: string; height: number; } const jane = { name: 'Jane', age: 26 } as Person; // 生成符合Man类型的新对象 const mark = {...jane, height: 160} as Man; // 最终内容:{name: 'Jane', height: 160}
注意:这种方式下,已有对象中多余的字段(比如示例里的age)不会被自动剔除,只是编译器通过断言认可对象符合目标类型,若需要严格剔除冗余字段,可使用下面的方案。
2. 类型安全的字段提取方案
利用TypeScript内置的Pick类型工具,精准提取已有对象中与目标类型匹配的字段,再补充额外字段:
interface Person{ name: string; age: number; } interface Man{ name: string; height: number; } const jane = { name: 'Jane', age: 26 } as Person; // 仅提取Person中与Man共有的字段 type SharedFields = Pick<Person, keyof Man>; // 生成严格符合Man类型的对象 const mark: Man = { ...(jane as SharedFields), height: 160 };
这种方式会在编译阶段就确保只保留目标类型需要的字段,运行时也不会存在冗余属性。
内容的提问来源于stack exchange,提问作者Austin L
相关产品推荐
相关产品推荐

