在基本组件 Angular 4 上实例化通用类型 T
Instantiate generic Type T on base component Angular 4
我有一个由某些子组件扩展的超级组件 :
export class BaseComponent<T extends InternalItem> {
private _internalGradientItems: T[];
constructor(cdr: ChangeDetectorRef) {
}
protected addRow(item: Item) {
// here I whant to instatiate the type T.
}
}
出于某种原因,我需要在基础组件上实例化 T 元素。
我没有找到任何解决方案来做到这一点。
唯一觉得哪个作品是投对象到T。
let iItem = <T>{ gradientItem: item }
但我不喜欢这个解决方案,不是干净安全的解决方案。
你找我有什么目的吗?
如果T
是一个class并且你想实例化它,你需要将构造函数传递给class到BaseComponent
。您可以要求一个空的构造函数,或者一个接受您从 BaseComponent
传入的属性的构造函数。
export class BaseComponent<T extends InternalItem> {
private _internalGradientItems: T[];
constructor(cdr: ChangeDetectorRef,public ctor: new (arg: { gradientItem: Item })=> T) {
}
protected addRow(item: Item) {
new this.ctor({ gradientItem: item });
}
}
//Usage:
class InternalItem { /* base props */ }
class DerivedInternalItem extends InternalItem {
/* props */
constructor(arg: { gradientItem: Item }) {
super()
}
}
export class DerivedComponent extends BaseComponent<DerivedInternalItem> {
constructor(cdr: ChangeDetectorRef) {
super(cdr, DerivedInternalItem)
}
}
我有一个由某些子组件扩展的超级组件 :
export class BaseComponent<T extends InternalItem> {
private _internalGradientItems: T[];
constructor(cdr: ChangeDetectorRef) {
}
protected addRow(item: Item) {
// here I whant to instatiate the type T.
}
}
出于某种原因,我需要在基础组件上实例化 T 元素。 我没有找到任何解决方案来做到这一点。 唯一觉得哪个作品是投对象到T。
let iItem = <T>{ gradientItem: item }
但我不喜欢这个解决方案,不是干净安全的解决方案。
你找我有什么目的吗?
如果T
是一个class并且你想实例化它,你需要将构造函数传递给class到BaseComponent
。您可以要求一个空的构造函数,或者一个接受您从 BaseComponent
传入的属性的构造函数。
export class BaseComponent<T extends InternalItem> {
private _internalGradientItems: T[];
constructor(cdr: ChangeDetectorRef,public ctor: new (arg: { gradientItem: Item })=> T) {
}
protected addRow(item: Item) {
new this.ctor({ gradientItem: item });
}
}
//Usage:
class InternalItem { /* base props */ }
class DerivedInternalItem extends InternalItem {
/* props */
constructor(arg: { gradientItem: Item }) {
super()
}
}
export class DerivedComponent extends BaseComponent<DerivedInternalItem> {
constructor(cdr: ChangeDetectorRef) {
super(cdr, DerivedInternalItem)
}
}