打字稿类型数组包含对象

问题描述:

我写打字稿以下二传手:打字稿类型数组包含对象

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类型的对象放在数组中吗?

+1

和你分配给二传手?这是最重要的部分,你不提供它...换句话说 - 你传递的数据是什么? – smnbbrv

+1

什么是数据?一个类或接口或其他东西? – smnbbrv

值得注意的是,Typescript不是可执行语言,它可以转换成JavaScript。这意味着在运行时你正在运行JavaScript而不是Typescript。正因为如此,有时你会得到奇怪的行为。

确实将数组的类型设置为“数据”,但是在打印Typescript时,运行时类型只是“Object”。这不像Java传递不正确的类型会抛出异常。不要指望Typescript类型可以防止任何运行时错误。

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

+1

但是'data [0] instanceof Data'仍然会返回true,即使在javascript中!除非数组是空的。 – Kokodoko