可以说我有一个带有一些属性dataItems的基类,它是DataItem的数组:
export class BaseClass{
dataItems:DataItems[];
}
然后,我有几个扩展BaseClass的类,它们的dataItems属性是扩展了DataItems的某个类的数组:
export class BetterClass extends BaseClass{
dataItems:BetterDataItems[];
}
export class BestClass extends BaseClass{
dataItems:BestDataItems[];
}
现在,我想在BaseClass中添加一个方法,该方法创建dataItems并将它们添加到数组。有可能在BaseClass中完成所有这些工作吗?我需要根据所使用的类来创建BetterDataItems或BestDataItems的实例。
此刻,我只是添加了:
dataItemType: typeof DataItem;
BaseClass的属性,在扩展BaseClass的每个类中,我使用适当的数据项类型覆盖此变量:
在BetterClass中:
dataItemType: typeof BetterDataItem = BetterDataItem;
在BestClass中:
dataItemType: typeof BestDataItem = BestDataItem;
然后,在BaseClass中,我这样做:
var dataItem = new this.dataItemType();
这工作正常,但我的问题是-是否有可能完全避免
dataItemType
属性?我可以找到一种dataItems
数组类型然后创建一个新实例吗?谢谢!
最佳答案
TypeScript 1.6代码:
class DataItems {
}
class BaseClass {
dataItems:DataItems[];
dataItemType: typeof DataItems = DataItems;
}
编译为:
var DataItems = (function () {
function DataItems() {
}
return DataItems;
})();
var BaseClass = (function () {
function BaseClass() {
this.dataItemType = DataItems;
}
return BaseClass;
})();
并且您可以看到
dataItems
中丢失了BaseClass
属性的类型信息。这就是TypeScript编译器的工作方式。 It does not support runtime checking。因此,回答您的问题是否定的。dataItemType: typeof BetterDataItem = BetterDataItem;
的解决方法行得通,因为您使TypeScript编译器添加了JS命令:this.dataItemType = BetterDataItem;
,以后可以使用它。关于class - 获取变量的类型并创建此类型的新实例,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33095813/