打字稿类型数组包含对象
问题描述:
我写打字稿以下二传手:打字稿类型数组包含对象
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
类型的对象放在数组中吗?
答
值得注意的是,Typescript不是可执行语言,它可以转换成JavaScript。这意味着在运行时你正在运行JavaScript而不是Typescript。正因为如此,有时你会得到奇怪的行为。
确实将数组的类型设置为“数据”,但是在打印Typescript时,运行时类型只是“Object”。这不像Java传递不正确的类型会抛出异常。不要指望Typescript类型可以防止任何运行时错误。
如果您希望实际捕获类型并在数组条目不是“数据”类型时失败,请确保所有条目均使用“新数据”创建。这将设置对象的构造函数并使“instanceof Data”返回true。
+1
但是'data [0] instanceof Data'仍然会返回true,即使在javascript中!除非数组是空的。 – Kokodoko
和你分配给二传手?这是最重要的部分,你不提供它...换句话说 - 你传递的数据是什么? – smnbbrv
什么是数据?一个类或接口或其他东西? – smnbbrv