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

如何在TypeScript/JavaScript中不修改接口为JSON数据新增属性

可以实现,以下是几种不用修改原Candle接口的解决办法:

方法1:创建新对象扩展属性(推荐)

直接在map里返回包含原属性和新属性的新对象,TypeScript会自动推断出交叉类型,既不修改原接口,也能保持类型安全:

const modifiedData = this.data1.map(d => ({
  ...d,
  expanded1: false,
  expanded2: false
}));

此时modifiedData的类型会被推断为(Candle & {expanded1: boolean; expanded2: boolean})[],后续访问新属性不会有类型报错。

方法2:类型断言修改原对象

如果需要直接修改原数组中的对象(而非创建新对象),可以用类型断言告诉TypeScript该对象允许包含新增属性:

const modifiedData = this.data1.map(d => {
  const candleWithExpanded = d as Candle & {expanded1: boolean; expanded2: boolean};
  candleWithExpanded.expanded1 = false;
  candleWithExpanded.expanded2 = false;
  return candleWithExpanded;
});

注意这种方式会改动原数组里的对象,若不想影响原始数据,优先选方法1。另外尽量避免用any断言,会丢失TypeScript的类型检查优势。

方法3:定义扩展接口

如果带新属性的类型需要在多处使用,可以定义一个继承自Candle的新接口(不修改原接口):

interface CandleWithExpanded extends Candle {
  expanded1: boolean;
  expanded2: boolean;
}

// 然后在map中返回新对象并指定类型
const modifiedData: CandleWithExpanded[] = this.data1.map(d => ({
  ...d,
  expanded1: false,
  expanded2: false
}));

这种方式类型更清晰,适合复杂业务场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 23:00:03