380

TypeScriptを使用して実行時にオブジェクトのクラス/タイプ名を取得することは可能ですか?

class MyClass{}

var instance = new MyClass();
console.log(instance.????); // Should output "MyClass"
4

10 に答える 10

30

私はパーティーに遅れていることを知っていますが、これもうまくいくことがわかりました.

var constructorString: string = this.constructor.toString();
var className: string = constructorString.match(/\w+/g)[1]; 

あるいは...

var className: string = this.constructor.toString().match(/\w+/g)[1];

上記のコードは、コンストラクター コード全体を文字列として取得し、正規表現を適用してすべての「単語」を取得します。最初の単語は「関数」、2 番目の単語はクラスの名前にする必要があります。

お役に立てれば。

于 2015-06-09T06:49:40.973 に答える
20

この質問を参照してください。

TypeScript は JavaScript にコンパイルされるため、実行時に JavaScript を実行しているため、同じルールが適用されます。

于 2012-11-28T21:47:47.597 に答える
5

Angular2 では、これはコンポーネント名を取得するのに役立ちます:

    getName() {
        let comp:any = this.constructor;
        return comp.name;
    }

関数には最初にプロパティ名がないため、TypeScript コンパイラはエラーを発行するため、comp:anyが必要です。

于 2016-06-17T22:07:05.257 に答える
5
  • 使用するには「.prototype . 」を追加する必要がありました: myClass.prototype.constructor.name.
  • それ以外の場合は、次のコードで : myClass.constructor.name、TypeScript エラーが発生しました:

error TS2339: Property 'name' does not exist on type 'Function'.

于 2017-05-29T10:01:48.500 に答える
3

完全な TypeScript コード

public getClassName() {
    var funcNameRegex = /function (.{1,})\(/;
    var results  = (funcNameRegex).exec(this["constructor"].toString());
    return (results && results.length > 1) ? results[1] : "";
}
于 2013-06-11T13:24:31.503 に答える