2016-08-10 29 views
0

デバッグの目的で、toString()抽象クラスのメソッドで、インスタンスが実際にどのサブクラスであるかを出力します。またTypeScript:実行時にオブジェクトのクラス/コンストラクタを取得する

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

私はstaticメンバーにアクセスするために活字体で、そのクラスを使用することができれば、それは素晴らしいことです。言い換えれば、TypeScriptがstaticフィールドを入れるJavaScriptコンストラクタ関数を取得した場合です。

私は

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

を試みたしかし、それはそれではないです:)

+0

作品(クラス:Bクラス:C); IE11では動作しません(クラス:未定義、クラス:未定義)。 –

答えて

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 }`; 
} 
クロームバージョン58で私のために
関連する問題