You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何以左外连接方式从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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 02:45:34