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

Typescript中从扩展类型中省略指定键/属性的最佳方法是什么

首先明确核心前提:TypeScript 的类型系统仅在编译阶段生效,不会对运行时的实际对象结构做任何修改。你定义的 Omit<Thing, "bar"> 只是静态类型层面的约束,不会自动帮你移除运行时对象上的 bar 属性,所以之前直接展开整个 item 的写法自然会保留 bar 属性。

不需要写显式 delete 逻辑就能移除 bar 的可行方案如下:

方案1:解构剔除不需要的属性

这是最常用的写法,通过解构把要移除的 bar 单独提取出来,剩余属性再和新增属性拼接:

const transform = (item: Thing): ExtendThing => {
  // 解构时单独取出bar,剩余属性放到rest变量中
  const { bar, ...rest } = item;
  return {
    ...rest,
    foobar: `${item.foo}-${item.bar}`
  };
}

执行后返回的对象默认就不会包含 bar 属性。

方案2:直接构造目标结构的新对象

如果需要保留的原属性数量很少,可以直接手动声明要返回的属性,不需要对原对象做额外处理:

const transform = (item: Thing): ExtendThing => {
  return {
    foo: item.foo,
    foobar: `${item.foo}-${item.bar}`
  };
}

这种写法逻辑最直观,也没有额外的运算开销。

内容的提问来源于stack exchange,提问作者ShadyAmoeba

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 22:15:06