TypeScript:在运行时获取对象的类/构造函数

时间:2016-08-10 15:09:00

标签: typescript introspection

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

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

如果我可以在TypeScript中使用该类来访问static成员,那就太棒了。换句话说,如果我得到了CodeScript放置static字段的JavaScript构造函数。

我试过

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

但那不是它:)

1 个答案:

答案 0 :(得分:1)

使用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 }`;
}