打字稿 - 变量声明

时间:2016-10-03 12:59:52

标签: angular typescript

我不确定这是否是这个问题的地方,但我被告知代码审查不适合它。

我刚学习Angular 2和Typescript,所以我正在学习以下教程:

https://angular.io/docs/ts/latest/tutorial/toh-pt4.html

在第三部分和第四部分之间,heroesapp.component.ts变量的声明更改为:

export class AppComponent {
    heroes = HEROES;
}

为:

export class AppComponent {
    heroes: Hero[];
}

我理解第一个将它设置为英雄数组的常量,但为什么第二个使用冒号而不只是将它设置为空数组?

将第二个更改为=实际上会抛出表达式预期错误,所以基本上我只是想了解两者之间的差异。

4 个答案:

答案 0 :(得分:5)

heroes: Hero[];

不会将其设置为值。 它只是用

定义了一个属性
  • name = heroes
  • type = Hero[],表示Hero
  • 的数组
  • 未指定使其保持默认值null的值。

初始化时看起来像

heroes: Hero[] = [new Hero('Spidey'), new Hero('Batman')];

答案 1 :(得分:1)

两者之间的区别在于第一个是javascript,你将英雄变量分配给常量** HEROES *。

第二个它是打字稿的东西,你说英雄变量将是一个英雄数组,基本上你是在定义一个空变量。

它就像java或c#,你在课堂上做cam.position.set(cam.viewportWidth / 2, cam.viewportHeight / 2, 0); 之类的事情

答案 2 :(得分:1)

你的第一个理解是正确的

heroes = HEROES

现在,

heroes : Hero [ ];

这里Hero代表拥有某些属性的类。通过这一行,您告诉打字稿编译器 heroes variablelist of objects的类型Hero(自定义或用户定义类型)。在OOP中,class是用户定义的dataType,根据该类型,您可以使用该类型声明任何变量。

请注意,您可以使用Type声明(:)任何变量,您无法确定(=)Type(在Typescript中),但您可以将that Type of data分配给变量。

所以在这里你不能使用=

我希望这会对你有帮助......

答案 3 :(得分:0)

只是补充@GünterZöchbauer,

在类/接口声明中,:在使用属性名称定义其类型之后。

但是,当您在运行中创建对象时,这可能会引起一些混淆,在这种情况下,:标记值赋值:

interface MyInterface {
  myBooleanProperty: boolean = false;
}

// ... somewhere

let a = {
  myBooleanProperty: true
};

// and to add a little more fun

let b: MyInterface = {
  myBooleanProperty: true
}