Rob*_*ker 1 angularjs typescript
为角度服务创建接口与导出服务类并将其用于类型信息有什么好处?
例:
class Dashboard {
constructor(ui: IUiService){}
}
Run Code Online (Sandbox Code Playgroud)
VS
class Dashboard {
constructor(ui: UiService){}
}
Run Code Online (Sandbox Code Playgroud)
是否有性能优势?如果我只是将服务类用于类型信息会发生什么?
它似乎是额外的工作,没有任何好处,除非你有一个可以使用但具有共同基础的服务的不同实现.或者,当您想要在单元测试中模拟服务而不是直接使用它们时.
编辑:我很想知道打字稿编译器将对仅用于类型信息的导入做什么.它会调用构造函数还是添加到require语句(ES6)?它会新建一个类的实例吗?
这不是一个TypeScript问题,这是一个"什么是适合的接口"(简而言之)答案是:客户端不应该"知道"所请求服务的真正实现是什么.今天你的UiService足以满足你的需求,但有一天你可能会有另一个实现,甚至你想在你的测试中嘲笑它.
另一种情况是,UiService是由整个系统的ProUiService扩展的,你不得不遍布你的系统并改变注入的类型,而不是真正需要它.
如前所述:客户端不应该知道所请求服务的真正实现是什么.
编辑(回答编辑):
TypeScript编译器不会"知道"在哪里选择这些类型Class/Interface,您必须在代码中使用tsconfig.json或引用(注释)让TypeScript了解定义此声明的位置.如果它是一种类,则无关紧要.
重要的是要理解当你导入(ES6样式)一个类并且从不真正使用它时(仅将它用作类型定义)它将被编译器删除,因为JavaScript中并不存在类型. 但是,如果你使用它.例如:
var ui = new UiService(); // This will generate a javascript code
Run Code Online (Sandbox Code Playgroud)
编译器不会删除import语句.
| 归档时间: |
|
| 查看次数: |
547 次 |
| 最近记录: |