假设我有一个带有一些属性dataItems的基类,它是DataItem的数组:
export class BaseClass{
dataItems:DataItems[];
}
Run Code Online (Sandbox Code Playgroud)
然后我有几个扩展BaseClass的类,它们的dataItems属性是扩展DataItems的某个类的数组:
export class BetterClass extends BaseClass{
dataItems:BetterDataItems[];
}
export class BestClass extends BaseClass{
dataItems:BestDataItems[];
}
Run Code Online (Sandbox Code Playgroud)
现在我想在BaseClass中添加一个方法,它创建dataItems并将它们添加到数组中.是否可以在BaseClass中完成所有这些操作?我需要创建BetterDataItems或BestDataItems的实例,具体取决于使用的类.
目前我只是补充说:
dataItemType: typeof DataItem;
Run Code Online (Sandbox Code Playgroud)
属性到BaseClass并在扩展BaseClass的每个类中使用适当的数据项类型覆盖此变量:
在BetterClass中:
dataItemType: typeof BetterDataItem = BetterDataItem;
Run Code Online (Sandbox Code Playgroud)
在BestClass:
dataItemType: typeof BestDataItem = BestDataItem;
Run Code Online (Sandbox Code Playgroud)
然后,在BaseClass中我这样做:
var dataItem = new this.dataItemType();
Run Code Online (Sandbox Code Playgroud)
这很好但我的问题是 - 是否可以避免拥有dataItemType财产?我可以找到一种类型的dataItems数组并创建一个新实例吗?
谢谢!
TypeScript 1.6 代码:
class DataItems {
}
class BaseClass {
dataItems:DataItems[];
dataItemType: typeof DataItems = DataItems;
}
Run Code Online (Sandbox Code Playgroud)
编译为:
var DataItems = (function () {
function DataItems() {
}
return DataItems;
})();
var BaseClass = (function () {
function BaseClass() {
this.dataItemType = DataItems;
}
return BaseClass;
})();
Run Code Online (Sandbox Code Playgroud)
您可以看到dataItems属性的类型信息在BaseClass. 这就是 TypeScript 编译器的工作原理。它不支持运行时检查。所以你的问题的答案是否定的。
你的解决方法dataItemType: typeof BetterDataItem = BetterDataItem;是有效的,因为你让 TypeScript 编译器添加 JS 命令: this.dataItemType = BetterDataItem;稍后可以使用。
| 归档时间: |
|
| 查看次数: |
704 次 |
| 最近记录: |