如何修复打字稿中丢失的类型

时间:2020-07-16 02:26:57

标签: javascript typescript

 DATA = {
    data: [
      { id: "1r5WioSdYLVqp", row: 1, assetType: "1r5WioSdYLVqp", status: "" },
      { id: "w1muKlmY4lsR", row: 2, assetType: "w1muKlmY4lsR", status: "" },
      { id: "1foDN2HDHiAbT", row: 3, assetType: "1foDN2HDHiAbT", status: "" }
    ]
  };

  new = { row: 1, assetType: "1fKBO4w0XHg7H", status: "ACTIVE" }
  constructor() { }

  ngOnInit() {
    console.log(this.DATA);

    this.DATA['data'].forEach((dt, index) => {
      if (dt.row === this.new.row) {
        this.DATA['data'][index] = this.new;
      }
    });

    console.log(this.DATA)
  }

我在这里想要做的是根据行号更新数据。但在新版本中,它没有ID。但我收到一个错误,它是: enter image description here

4 个答案:

答案 0 :(得分:2)

我们可以通过使用类型注释来表明该项目没有for w in api iwell = df[!, :API] .== w welldates = df[!, :Monthly_Production_Date][iwell] cgor = df[!, :norm_3m_moving_avg_cGOR][iwell] isortedwelldates = sortperm(welldates) Mads.plotseries([cgor[isortedwelldates]], "Bone_Spring_ML_analyses/figures-data/well-$w.png"; title="Well $(w)", names=["Cumulative_GOR"], colors=["red"], xaxis=welldates[isortedwelldates]) end

首先,让我们声明一个类型:

id

上面interface Item { id?: string; row: number; assetType: string; status: string; } 上的?表示它是一个可选属性。可以指定也可以不指定。

现在应用它:

id

请注意,我以对象文字类型DATA: { data: Item[] } = { data: [ { id: "1r5WioSdYLVqp", row: 1, assetType: "1r5WioSdYLVqp", status: "" }, { id: "w1muKlmY4lsR", row: 2, assetType: "w1muKlmY4lsR", status: "" }, { id: "1foDN2HDHiAbT", row: 3, assetType: "1foDN2HDHiAbT", status: "" } ] }; new = { row: 1, assetType: "1fKBO4w0XHg7H", status: "ACTIVE" } constructor() { } ngOnInit() { console.log(this.DATA); this.DATA.data.forEach((dt, index) => { if (dt.row === this.new.row) { this.DATA.data[index] = this.new; // no error. } }); console.log(this.DATA) } 的形式添加了其他类型。这样做是因为问题中的代码嵌套。如果{ data: Item[] }仅具有一个属性DATA,我将对其进行包装以简化操作。

那你就可以写

data

哪个更容易阅读和编写。或者,我们可以为外部对象声明类型

data: Item[] = [
  { id: "1r5WioSdYLVqp", row: 1, assetType: "1r5WioSdYLVqp", status: "" },
  { id: "w1muKlmY4lsR", row: 2, assetType: "w1muKlmY4lsR", status: "" },
  { id: "1foDN2HDHiAbT", row: 3, assetType: "1foDN2HDHiAbT", status: "" }
]

最后,与此无关,我们可以通过删除不必要的interface DataWrapper { data: Item[]; } DATA: DataWrapper = { data: [ { id: "1r5WioSdYLVqp", row: 1, assetType: "1r5WioSdYLVqp", status: "" }, { id: "w1muKlmY4lsR", row: 2, assetType: "w1muKlmY4lsR", status: "" }, { id: "1foDN2HDHiAbT", row: 3, assetType: "1foDN2HDHiAbT", status: "" } ] } 来清理这段代码。

forEach

答案 1 :(得分:1)

在变量id的属性new上设置null。

  new = { id: null, row: 1, assetType: "1fKBO4w0XHg7H", status: "ACTIVE" }

答案 2 :(得分:1)

这可能是打字稿迫使您编写更好的代码的情况。我想不出任何原因来生成具有空ID的数据。为什么不这样:

del numbers[j]

答案 3 :(得分:1)

我建议为数据中的对象创建一个类型,并按如下所示相应地设置类型,以帮助您提示缺少的内容,以避免这种混乱:

useState