给定这个类的层次结构
export class A {
static m() { return 'a'};
}
export class B extends A {
static m() { return 'b'};
}
export class C extends A {
static m() { return 'c'};
}
我需要一个方法,该方法采用类数组(不是实例)扩展 A
并在数组的每个元素上调用 m()
:
function looper(classes: A[]) {
classes.forEach(c => c.m());
}
这需要一个 A 或其子类的实例数组。
我怎样才能拥有一个将扩展 A 作为参数类的方法?
@Oscar Paz 指出的泛型
编辑 1
此外,looper 的输入需要存储在对象的属性中:
export class Container {
public klazzes: A[];
}
最佳答案
好吧,使用泛型:
function callM<T extends typeof A>(arr: T[]): void {
arr.forEach(t => t.m());
}
现在您可以:
callM([A, B, C]); // OK
callM([A, B, string]); // Error
如果要存储值:
class Container {
public klazzes: (typeof A)[];
}
const cont: Container = new Container();
callM(cont.klazzes);
关于class - 以类型为参数的 typescript 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49674088/