2014-02-17 65 views
1

我測試打字稿,我跑了與數組,接口和可空變量的煩惱:打字稿可空數組

我有這樣的接口:

interface Entity { 
    life: number; 
    type: EntityType; 
} 

而且我有這樣的特性:

world: Entity[]; 

我試圖用以下方式進行初始化:

this.world = [ 
    [null, null, null, null, null, null, null, null], 
    [null, null, null, null, null, null, null, null], 
    [null, null, null, null, null, null, null, null], 
    [null, null, null, null, null, null, null, null], 
    [null, null, null, null, null, null, null, null], 
    [null, null, null, null, null, null, null, null], 
    [null, null, null, null, null, null, null, null], 
    [null, null, null, null, null, null, null, null] 
]; 

編譯器告訴我:

無法轉換{} []以實體[]

這可能嗎?難道我做錯了什麼。

在此先感謝!

PS:對不起,我不是母語的人。

回答

3

這裏發生了什麼是TypeScript推斷賦值的類型,並且由於數組中的所有條目都爲空,它推斷出一種類型爲{}[][]{}[][]不能分配給Entity[][],所以這是一個編譯錯誤。

您可以使用 類型斷言編譯 類型斷言來編譯代碼。代碼中還有一個錯誤,那就是您定義了一個數組(2D)數組,但world被聲明爲1D數組。我假設你打算在那裏有一個二維數組。

var world: Entity[][]; 

world = <Entity[][]>[ 
    [null, null, null, null, null, null, null, null], 
    [null, null, null, null, null, null, null, null], 
    [null, null, null, null, null, null, null, null], 
    [null, null, null, null, null, null, null, null], 
    [null, null, null, null, null, null, null, null], 
    [null, null, null, null, null, null, null, null], 
    [null, null, null, null, null, null, null, null], 
    [null, null, null, null, null, null, null, null] 
]; 
+0

是的,我明白了爲什麼編譯器很生氣。感謝演員的語法。我不知道。感謝2D Array語法。我不知道這種語法在Typescript中是可能的。 – fharreau

+0

+1。這在TypeScript中被稱爲「類型斷言」。 – Fenton

+0

謝謝史蒂夫,趕上。 –