【问题标题】:TypeScript Typed Array Containing Objects包含对象的 TypeScript 类型化数组
【发布时间】:2017-07-14 12:11:01
【问题描述】:

我在 TypeScript 中编写了以下 setter:

public set data(data: Array<Data>) {
  console.log(data[0].getterProperty);
  console.log(data[0] instanceof Data);
  console.log(typeof data[0]);
  this.setGridDataIfReady();
}

假设 data 包含一项,则打印出来

undefined
false
object

为什么会这样?如果我这样指定,不应该只是 Data 类型的对象在数组中吗?

【问题讨论】:

  • 你给二传手分配了什么?这是最重要的部分,而您却没有提供...换句话说 - 您传递的 data 是什么?
  • 什么是数据?类或接口或其他东西?

标签: arrays typescript


【解决方案1】:

值得注意的是,Typescript 不是一种可执行语言,它会转译成 JavaScript。这意味着在运行时您正在运行 JavaScript 而不是 Typescript。因此,有时您会出现奇怪的行为。

确实,您将数组的类型设置为“Data”,但是当 Typescript 被转译时,运行时类型只是“Object”。这不像 Java,传入不正确的类型会引发异常。不要期望 Typescript 类型可以防止任何运行时错误。

如果您想实际捕获类型并且如果数组条目不是“数据”类型时失败,请确保所有条目都是使用“新数据”创建的。这将设置对象的构造函数并使“instanceof Data”返回 true。

【讨论】:

  • 但 'data[0] instanceof Data' 仍应返回 true,即使在 javascript 中也是如此!除非数组为空。
猜你喜欢
  • 2020-07-08
  • 2021-08-15
  • 1970-01-01
  • 1970-01-01
  • 2018-08-09
  • 1970-01-01
  • 2019-03-12
  • 1970-01-01
  • 2020-07-27
相关资源
最近更新 更多