class - 以类型为参数的 typescript 方法

标签 class typescript

给定这个类的层次结构

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/

相关文章:

c++ - Xcode 中的 Objective-C++ 和 .cpp 文件

c++ - 如何在 C++ 中编写内联相互抽象代码?

Python - 将类属性设置为依赖于同一类中其他属性的值

javascript - 在单击之前显示 mdTooltip,再次单击时隐藏

reactjs - 观察者无法与 useLocalObservable 一起使用

使用保留名称的 typescript 命名空间声明

typescript - 为什么允许在 TypeScript 中将基元和对象相交?

c++ - 如果将 POD 包装在类中,是否会产生相同的效果?

html - 修复 :hover + class

javascript - 跳过 NULL 并在下拉列表中仅显示唯一值