2017-05-26 5 views
1

ich in einem isolierten Kontext zu arbeiten habe den folgenden Code nicht in der Lage:Union Typ

if (event.hasOwnProperty('body')) { 
    Context.request = JSON.parse(event.body) as T; 
} else { 
    Context.request = event; 
} 

wo event wie folgt definiert ist:

private static event: aws.IGatewayEvent | ut.IGenericEvent; 

Die erste Definition hat ein „Körper“ Attribut, das Sekunde nicht. Ich würde nach wie vor davon aus, dass meine bedingte Anweisung lassen sollte Typoskript sehen, dass der einzige Fall, links - aka, wo das Objekt implementiert die aws.IGatewayEvent-Schnittstelle - und nicht dem Fehler geben:

Property 'body' does not exist on type 'IGenericEvent | IGatewayEvent'.

+2

sehr ähnliche Frage https://stackoverflow.com/questions/43496154/accessing-different-properties-in-a-typescript-union-type – artem

+0

Das ist ein Nützlicher Link @artem aber ich habe immer noch die gleichen Fehler, wenn ich die Typüberprüfung zu einer Funktion abstrahiere. – ken

Antwort

1

Property 'body' does not exist on type 'IGenericEvent | IGatewayEvent'.

Objektprüfungen tun Erstellen Sie in TypeScript keinen automatischen Typwächter. Sie müssen jetzt einen benutzerdefinierten Typwächter erstellen.

Mehr

+0

Danke! Sie haben richtig eingerichtet, einen benutzerdefinierten Typ Wächter hat funktioniert. Ich denke, was @artem auf mich zeigte, war wahrscheinlich die gleiche Lösung, aber zuerst verpasste ich es, weil ich beiläufig gedacht hatte, dass der "as" Operator anstelle des "is" Operators verwendet wurde, den ich vorher nicht gesehen hatte. Auf jeden Fall danke für die Hilfe. – ken

Verwandte Themen