457 Stimmen

Abrufen des Klassennamens eines Objekts zur Laufzeit

Ist es möglich, den Klassen-/Typnamen eines Objekts zur Laufzeit mit TypeScript zu erhalten?

class MyClass{}

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

19voto

Matt Burland Punkte 43466

Siehe dies Frage .

Da TypeScript zu JavaScript kompiliert wird, wird zur Laufzeit JavaScript ausgeführt, so dass die gleichen Regeln gelten.

7voto

Admir Sabanovic Punkte 615

In Angular2 kann dies helfen, den Namen von Komponenten zu erhalten:

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

comp:any ist erforderlich, da der TypeScript-Compiler Fehler ausgibt, da Function anfangs keinen Eigenschaftsnamen hat.

7voto

Flox Punkte 125
  • Ich musste hinzufügen ". Prototyp. " zu verwenden: myClass.prototype.constructor.name .
  • Andernfalls mit folgendem Code: myClass.constructor.name hatte ich den TypeScript-Fehler:

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

3voto

Nati Krisi Punkte 1003

Der vollständige TypeScript-Code

public getClassName() {
    var funcNameRegex = /function (.{1,})\(/;
    var results  = (funcNameRegex).exec(this["constructor"].toString());
    return (results && results.length > 1) ? results[1] : "";
}

-1voto

Cocowalla Punkte 12746

Wenn Sie bereits wissen, welche Typen zu erwarten sind (zum Beispiel, wenn eine Methode eine Vereinigungsart ), dann können Sie Type Guards verwenden.

Zum Beispiel können Sie für primitive Typen eine Schutztyp :

if (typeof thing === "number") {
  // Do stuff
}

Für komplexe Typen können Sie eine Instanz von guard :

if (thing instanceof Array) {
  // Do stuff
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X