TypeScript:在运行时获取对象的 class/constructor

TypeScript: Getting a class/constructor of the object at runtime

出于调试目的,我想要一个抽象 class 的 toString() 方法来打印实例实际是哪个 subclass。

abstract FrameModel {
    ...
    public toString() {
        var classOfThis = ?????;
        return `FrameModel<${classOfThis}>#${this.vertexId}`;
    }
}

另外,如果我可以在 TypeScript 中使用 class 来访问 static 成员,那就太好了;换句话说,如果我得到 TypeScript 将 static 字段放入的 JavaScript 构造函数。

我试过了

var classOfThis = Object.getPrototypeOf(this).constructor;

但事实并非如此:)

使用 Object.getPrototypeOf(this).constructor 确实有效:

type AConstructor = {
    new(): A;
    name: string;
}

abstract class A {
    toString(): string {
        return `class: ${ (Object.getPrototypeOf(this).constructor as AConstructor).name }`;
    }
}

class B extends A {}

class C extends A {}

let b = new B();
console.log(b.toString()); // class: B

let c = new C();
console.log(c.toString()); // class: C

(code in playground)

我不确定为什么它不适合您,我需要查看更多您的代码。
在任何情况下,您还可以使用:this.constructor:

toString(): string {
    return `class: ${ (this.constructor as AConstructor).name }`;
}