2016-08-10 1 views
0

Zu Debuggingzwecken möchte ich eine toString() Methode einer abstrakten Klasse drucken, von welcher Unterklasse die Instanz tatsächlich ist.TypeScript: Abrufen einer Klasse/eines Konstruktors des Objekts zur Laufzeit

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

Auch wäre es toll, wenn ich diese Klasse in Typoskript verwenden könnte die static Mitglieder zuzugreifen; Mit anderen Worten, wenn ich die JavaScript-Konstruktorfunktion bekam, in die TypeScript die static Felder einfügt.

Ich habe versucht,

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

Aber das ist es nicht :)

+0

Works für mich in Chrome Version 58 (Klasse: B, Klasse: C); funktioniert aber nicht in IE11 (Klasse: undefiniert, Klasse: undefiniert). –

Antwort

1

Object.getPrototypeOf(this).constructor verwenden, funktioniert aber tatsächlich funktioniert:

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)

Ich bin nicht sicher warum nicht für dich, ich muss mehr von deinem Code sehen.
In jedem Fall können Sie auch: this.constructor:

toString(): string { 
    return `class: ${ (this.constructor as AConstructor).name }`; 
} 
Verwandte Themen