2016-08-31 7 views
2

existiert Ich habe eine Funktion, dieTyposkript überprüfen, ob Eigenschaft

myFunc(arg: (Obj1 | Obj2)) 

In meiner Funktion 2 verschiedene Arten von Objekten als Argument kann ich möchte so etwas wie:

let val = (arg instance of Obj1) ? Obj1.propOnlyOnObj1 : Obj2.propOnlyOnObj2; 

da nur diese Eigenschaften existieren auf eines der OJBECT-Typoskripts löst Fehler aus.

Antwort

0

Dies sollte funktionieren

class A { 
    public field1: string = 'asd'; 
} 

class B { 
    public field2: string = 'def'; 
} 

function test(arg: A | B) { 
    var value = arg instanceof A ? arg.field1 : arg.field2; 
    //use value 
} 

Sie können hier mit ihm spielen: Typescript playground

+0

Meine Konsole sagt: Argument des Typs 'TypeOf A' ist nicht Zuweisbar für Parameter des Typs 'A | B '. Typ 'Typ A' kann nicht dem Typ 'B' zugewiesen werden. Die Eigenschaft 'field2' fehlt im Typ 'typeof A'. – dan

+0

Tut mir leid, ich glaube, mein Problem besteht darin, dass ich ein Objekt übergebe, das keine Instanz von classA, sondern von interfaceA ist. Könnte es das sein? – dan

+0

Könnte sein. Versuchen Sie, ein minimales, vollständiges, überprüfbares Beispiel zu teilen. Klassen, Schnittstellen, etc. – Andrew

0

Mit lodash.has

let val = _.has(Obj1, 'propOnlyOnObj1') ? 
    Obj1.propOnlyOnObj1 : Obj2.propOnlyOnObj2; 
+0

Es ist ein Overkill für etwas so einfaches wie "propOnlyOnObj1" in Obj1' in Vanille js. – zerkms

Verwandte Themen