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

如何在不复制对象的前提下移除子类字段以匹配父类类型?

TypeScript 不复制对象移除子类属性转为父类类型

针对第三方库定义的父接口A和继承自A的子接口B(含必填属性y),要在不复制对象的前提下,移除B类型对象的y字段使其匹配A类型,可通过以下几种方法绕过TypeScript的类型检查:

  • 断言为any类型后删除
    利用any绕过类型校验,直接删除属性,之后再断言为A类型使用:

    // 绕过类型检查删除y字段
    delete (b as any).y;
    // 此时b已符合A类型,可直接断言使用
    const a: A = b as A;
    
  • 断言为带可选y的交叉类型
    通过交叉类型让y变为可选属性,让TypeScript允许删除操作:

    // 断言为A与可选y的交叉类型,允许删除y
    delete (b as A & { y?: string }).y;
    // 删除后b自动符合A类型
    const a: A = b;
    
  • 修改属性配置后删除(非必要)
    若对象属性的configurable被设为false(对象字面量默认不会出现此情况),可先修改配置再删除:

    Object.defineProperty(b, 'y', { configurable: true });
    delete b.y;
    const a: A = b as A;
    

以上方法均直接修改原对象,无需创建副本,解决了TypeScript类型系统对必填属性和不存在属性的校验限制。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 18:15:04