我不确定这是否是这个问题的地方,但我被告知代码审查不适合它。
我刚学习Angular 2和Typescript,所以我正在学习以下教程:
https://angular.io/docs/ts/latest/tutorial/toh-pt4.html
在第三部分和第四部分之间,heroes
中app.component.ts
变量的声明更改为:
export class AppComponent {
heroes = HEROES;
}
为:
export class AppComponent {
heroes: Hero[];
}
我理解第一个将它设置为英雄数组的常量,但为什么第二个使用冒号而不只是将它设置为空数组?
将第二个更改为=
实际上会抛出表达式预期错误,所以基本上我只是想了解两者之间的差异。
答案 0 :(得分:5)
heroes: Hero[];
不会将其设置为值。 它只是用
定义了一个属性heroes
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 variable
将list 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
}