在 Angular / TypeScript 中创建模型对象的最佳实践是什么:
我应该使用带有对象表示法的类型注释(对象是Object
)? E.g. let m: MyModel = { name: 'foo' }
我应该使用new
运算符(对象是各自原型的实例)?
这两种方法是否应该混合使用并根据具体情况使用? (例如普通对象,当收到来自HttpClient
, but new MyModel('foobar')
为了方便通过将属性作为构造函数参数传递来创建实例)
这个问题的背景
我是 TypeScript 的新手,和许多其他开发人员一样,我来自流行的面向对象语言,例如 Java。
我理解的一个核心概念是 TypeScript 中的类型注释在运行时不起作用。它们对于编译器和编辑器的自动完成非常重要。基本上它是 ECMAScript 加上编译时类型检查。
当时我不知道这一点,并期望 TypeScript 是某种“客户端 Java”,我发现了这个 Angular 错误报告:https://github.com/angular/angular/issues/20770 https://github.com/angular/angular/issues/20770
人们(不理解 TypeScript 类型概念的人)抱怨HttpClient
不将返回的普通对象转换为其模型类类型。其他人则为这种行为辩护,并指出 JavaScript 中没有运行时类型。
我的问题就出现了:事实上 JavaScript 中有运行时类型。您可以使用以下命令创建原型实例new
运算符,甚至用以下命令检查它们的构造函数instanceof
操作员。
在 TypeScript 中,您有两种创建实例的方法:
1)使用对象表示法(如它们在角度教程 https://angular.io/tutorial/toh-pt1#create-a-hero-class):
hero: Hero = {
id: 1,
name: 'Windstorm'
};
2)使用new
-操作员:
hero: Hero = new Hero();
目前我正在开发一个混合了这两个选项的项目。 IE。相同类型的模型对象是以下对象的实例Object
在某些情况和情况下Hero
在其他情况下。
我预计这会导致稍后出现问题,因为构造函数仅在后一种情况下被调用。
我的规则/最佳实践的想法是将所有模型实例定义为普通对象,并使用通过依赖注入创建的服务、组件等的构造函数。结果我不会使用new
根本没有操作员。
但是我不确定这是否是一个好主意,而且我找不到最佳实践关于它的推荐。
EDIT
对于密切选民的重要提示:我不是在这里寻求您的个人意见。我宁愿寻找某种官方记录的 Angular 最佳实践,因为我认为这是必须从项目一开始就做出的核心设计决策,并且这些方法不应在没有特定原因的情况下随机混合。也许答案只是一个简单的“没有官方建议做出哪个决定”。