Angular 在基本组件4上实例化泛型类型T
我有一个超级组件,它由一些子组件扩展:Angular 在基本组件4上实例化泛型类型T,angular,typescript,generics,extends,Angular,Typescript,Generics,Extends,我有一个超级组件,它由一些子组件扩展: export class BaseComponent<T extends InternalItem> { private _internalGradientItems: T[]; constructor(cdr: ChangeDetectorRef) { } protected addRow(item: Item) { // here I whant to instatiate the
export class BaseComponent<T extends InternalItem> {
private _internalGradientItems: T[];
constructor(cdr: ChangeDetectorRef) {
}
protected addRow(item: Item) {
// here I whant to instatiate the type T.
}
}
导出类基本组件{
私有_internalGradientItems:T[];
构造函数(cdr:ChangeDetectorRef){
}
受保护的addRow(项:项){
//这里我想说明T型。
}
}
出于某种原因,我需要在基本组件上实例化T元素。
我没有找到任何解决办法。
唯一需要考虑的工作是将对象投射到T
let iItem = <T>{ gradientItem: item }
let iItem={gradientItem:item}
但我不喜欢这种溶液,它不是干净安全的溶液
你对我有什么目的吗 如果
T
是一个类,并且您想要实例化它,那么您需要将构造函数传递给类,传递给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)
}
}
导出类基本组件{
私有_internalGradientItems:T[];
构造函数(cdr:ChangeDetectorRef,public-ctor:new(arg:{gradientItem:Item})=>T){
}
受保护的addRow(项:项){
新的this.ctor({gradientItem:item});
}
}
//用法:
类内部项{/*基本属性*/}
类DerivedInternalItem扩展InternalItem{
/*道具*/
构造函数(参数:{gradientItem:Item}){
超级()
}
}
导出类DerivedComponent扩展BaseComponent{
构造函数(cdr:ChangeDetectorRef){
超级(cdr,衍生内部项目)
}
}
工作得非常完美,但我不确定这行“ctor:new(arg:{gradientItem:Item})=>T”@Yvan这是一个构造函数签名ctor
将是一个构造函数(也称为使用new
调用的函数),它接受指定类型的arg
,并返回T
的新实例