我有课:
export class LinkedList<t>
我现在使用:
创建一个超类export class ListBody extends collections.LinkedList<Element>
一切都很好。但是,我在其他几个类和每个地方声明了这个类,它实际上只需要几个超类的Element。所以我想在其他地方,而不是宣布:
this.body = new moduleListBody.ListBody();
声明:
this.body = new moduleListBody.ListBody<ElementOne | ElementTwo>();
有办法做到这一点吗?我不能跳过ListBody类,因为我在其中有大量的代码来操作Element对象。
更新:示例
export class Element {
}
export class LinkedList<t> {
public add(index : number, value : t);
public add(index : number, collection : LinkedList<t>);
public add(index : number, collection : t[]);
add(index : number, arg : t | LinkedList<t> | t[]) {
}
}
export class ListBody <T extends Element> extends LinkedList<T> {
public fubar(): void {
var element = new Element();
this.add(0, element);
}
}
答案 0 :(得分:1)
这绝对是可能的,下面的代码是一个如何完成这样的事情的例子:
class LinkedList<T> {
el: T
}
class ListBody<T extends Element> extends LinkedList<T> { }
var list = new ListBody<HTMLElement | SVGElement>();
list.el
将为HTMLElement | SVGElement
。
更新:您需要将类型传递给fubar,或者在扩展类上存储T的构造函数。见下文:
export class ListBody <T extends Element> extends LinkedList<T> {
public fubar(Type: new () => T): void {
var element = new Type();
this.add(0, element);
}
}
或
export class ListBody<T extends Element> extends LinkedList<T> {
Type: new () => T;
public fubar(): void {
var element = new this.Type();
this.add(0, element);
}
}