2014-02-17 47 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

谢谢史蒂夫,赶上。 –