TypeScriptを使用して実行時にオブジェクトのクラス/タイプ名を取得することは可能ですか?
class MyClass{}
var instance = new MyClass();
console.log(instance.????); // Should output "MyClass"
TypeScriptを使用して実行時にオブジェクトのクラス/タイプ名を取得することは可能ですか?
class MyClass{}
var instance = new MyClass();
console.log(instance.????); // Should output "MyClass"
私はパーティーに遅れていることを知っていますが、これもうまくいくことがわかりました.
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 番目の単語はクラスの名前にする必要があります。
お役に立てれば。
この質問を参照してください。
TypeScript は JavaScript にコンパイルされるため、実行時に JavaScript を実行しているため、同じルールが適用されます。
Angular2 では、これはコンポーネント名を取得するのに役立ちます:
getName() {
let comp:any = this.constructor;
return comp.name;
}
関数には最初にプロパティ名がないため、TypeScript コンパイラはエラーを発行するため、comp:anyが必要です。
myClass.prototype.constructor.name
.myClass.constructor.name
、TypeScript エラーが発生しました: error TS2339: Property 'name' does not exist on type 'Function'
.
完全な TypeScript コード
public getClassName() {
var funcNameRegex = /function (.{1,})\(/;
var results = (funcNameRegex).exec(this["constructor"].toString());
return (results && results.length > 1) ? results[1] : "";
}