2017-07-14 53 views
1

我寫打字稿以下二傳手:打字稿類型數組包含對象

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

回答

1

值得注意的是,Typescript不是可執行語言,它可以轉換成JavaScript。這意味着在運行時你正在運行JavaScript而不是Typescript。正因爲如此,有時你會得到奇怪的行爲。

確實將數組的類型設置爲「數據」,但是在打印Typescript時,運行時類型只是「Object」。這不像Java傳遞不正確的類型會拋出異常。不要指望Typescript類型可以防止任何運行時錯誤。

如果您希望實際捕獲類型並在數組條目不是「數據」類型時失敗,請確保所有條目均使用「新數據」創建。這將設置對象的構造函數並使「instanceof Data」返回true。

+1

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