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
相关产品推荐
相关产品推荐

