angular - 是否可以在打字稿界面中升级泛型?
问题描述
我有一堆服务被定义为
export abstract class BaseService<T> {
abstract getItem(id: string): T {}
}
export class FooService: BaseService<ADataModel> {
getItem(id: string): ADataModel {}
}
当它在需要扩展的特定项目中被重用时ADatatModel
,它工作得很好
export class SubClassedDataModel extends ADataModel {
}
通常,扩展数据模型还需要扩展服务以考虑额外的字段,就像这样
export class SubClassedService extends FooService {
}
但是,使用扩展服务的项目中的语法变得有点乏味,因为我必须将返回值显式转换为SubClassedDataModel
类型。
即想象FooService
被提供为SubClassedService
public myData: SubClassedDataModel;
constructor(f: FooService) {
this.myData = f.getItem('1') as SubClassedDataModel;
}
问题:有没有办法告诉SubClassedService
它应该将 T 视为SubClassedDataModel
,同时保持任何其他引用完整?
即,如果另一个库服务使用FooService
它,它仍应在该类型上工作MyDataModel
,而扩展项目中 FooService 的任何访问器将其视为SubClassedDataModel
?
最好不要重新定义每个函数,或者在语法中添加额外的 pr-usage 代码。
基本上:我能做到吗:
public myData: SubClassedDataModel;
constructor(f: FooService) {
this.myData = f.getItem('1');
}
解决方案
推荐阅读
- c# - 添加对使用 MSXML2 的引用
- c# - 使用 C# 的 SOAP 客户端
- python - Python Matplotlib:在图表的最左侧对齐文本
- terminal - 如何在 C 语言的屏幕底部保持提示?
- c++ - CMake 文件分别构建主要和测试
- flutter - Dart 扩展问题
- javascript - 将 JavaScript 日期转换为 Swift JSON timeIntervalSinceReferenceDate 格式
- python-3.x - 允许在 Django 中下载 Amazon S3 文件夹的全部内容
- reactjs - React:期望一个赋值或函数调用,而是看到一个表达式 | 对象作为 React 子对象无效(找到:带有键 {0、1、
- html - 如何在保持 tbody 仅滚动的同时将最大高度调整为百分比?