2017-05-19 6 views
3

Ich versuche, einen Weg zu finden, ein Objekt zu übergeben, um in einer Laufzeit zu funktionieren und es zu überprüfen. Dies ist ein Pseudo-Code:Wie überprüft man den Objekttyp zur Laufzeit in TypeScript?

func(obj:any){ 
    if(typeof obj === "A"){ 
    // do something 
    } 
    else if(typeof obj === "B"{ 
    //do something else 
    } 

} 
a:A; 
b:B; 
func(a); 

Aber typeof wird immer wieder zurückkehren „Objekt“ und ich konnte nicht einen Weg finden, die wirkliche Art von „a“ oder „b“ zu erhalten. Das instanceof funktioniert auch nicht und gibt dasselbe zurück. Irgendeine Idee, wie man es in einem TypeScript macht?

Vielen Dank für Ihre Hilfe !!!

Antwort

6

Typen werden zur Kompilierzeit entfernt und sind zur Laufzeit nicht vorhanden, daher können Sie den Typ zur Laufzeit nicht überprüfen.

Was Sie tun können, ist zu überprüfen, dass die Form eines Objekts ist, was Sie erwarten, und Typoskript können die Art zum Zeitpunkt der Kompilierung behaupten eine user-defined type guard verwenden, die true zurückgibt, wenn die Form der Ihre Erwartungen erfüllt:

interface A { 
    foo: string; 
} 

interface B { 
    bar: number; 
} 

function isA(obj: any): obj is A { 
    return obj.foo !== undefined 
} 

function isB(obj: any): obj is B { 
    return obj.bar !== undefined 
} 

function func(obj: any) { 
    if (isA(obj)) { 
    // In this block 'obj' is narrowed to type 'A' 
    obj.foo; 
    } 
    else if (isB(obj)) { 
    // In this block 'obj' is narrowed to type 'B' 
    obj.bar; 
    } 
} 

Example in Playground

+0

vielen dank, es ist jetzt klar! – Eden1971

+0

überprüfen Sie diese: https://alicolicode.com/2016/04/23/type-checking-typescript/ Bitte seien Sie Ufer, Sie sehen diese Linie auch: console.log (John instanceof Person); // Wahr ... Prost! – peter70

+0

@ peter70 Das funktioniert nur mit Klasseninstanzen, nicht mit anderen Typen (wie Schnittstellen). OP genannt 'instanceof' funktionierte nicht, also nehme ich an, dass er ein Nicht-Klasseninstanzobjekt hat. – Aaron

Verwandte Themen