【发布时间】:2018-03-15 01:27:18
【问题描述】:
我正在参加 Udemy 课程来学习 Angular。在本课程中,我们正在制作一个显示食谱并让您将食谱中的物品添加到购物清单的应用程序。我创建了一个模型来描述 TypeScript 中的一种成分,然后我将它们放在一个数组中。
代码如下所示:
这是模型(简短而简单)
export class Ingredient {
constructor(public name: string, public amt: number) {}
}
这是它在组件中的使用位置:
export class ShoppingListComponent implements OnInit {
ingredients: Ingredient[] = [
{ name: 'Apples', amt: 5 },
{ name: 'Tomatos', amt: 3 },
];
我的问题是:讲师使用new 声明数组中的对象,如下所示:new Ingredient('Apples', 5) 但我想知道的是,new 关键字是否必要? ingredients 数组被显式键入到成分中,所以不会强制放入数组中的任何对象符合成分类吗?无论哪种方式,当我启动它时,我的应用程序上的数据都会显示相同。而且我知道打字有效,因为如果我将{ foo: 'bar' } 扔到数组中,webpack 会拒绝编译。
用new 调用构造函数和像我一样写出对象有区别吗?
【问题讨论】:
-
TS 使用结构性而非名义性的类型。因此,只要您的对象满足接口,无论您是
new还是从文字构建它都没有关系。但是new一个有方法、访问器等的类要容易得多。 -
相关帖子,stackoverflow.com/a/49084429/3731501 。 TL;DR:如果您不需要类可以提供的任何东西,请改用接口。
标签: angular typescript object