2016-08-01 8 views
3

Warum Schnittstelle mit optionalen Eigenschaft wird anders als Schnittstelle ohne behandelt? Werden alle Eigenschaften für die Typassertion als optional betrachtet, wenn keine davon explizit optional definiert ist?Typoskript Typ Assertions - Schnittstelle mit optionalen Mitgliedern

interface WithOptionalProperty { 
    requiredProperty: string; 
    optionalProperty?: string; 
} 

//compilation error 'requiredProperty' is missing 
let a = { optionalProperty: '' } as WithOptionalProperty; 

interface WithoutOptionalProperties { 
    requiredProperty: string; 
    anotherRequiredProperty: string; 
} 

//but this works as expected 
let b = { anotherRequiredProperty: '' } as WithoutOptionalProperties; 

Antwort

1

Dies liegt daran, Typ Assertionen zwischen den Typen A und B gelingt, wenn A zuordenbar B oder B ist zuordenbar A (vereinfachte Erklärung) ist.

Keine dieser Bedingungen ist in Ihrem Fall wahr 1. Aber einer von diesen ist wahr in Fall B (daher die Behauptung kompiliert fein).

Mehr

https://basarat.gitbooks.io/typescript/content/docs/types/type-assertion.html

Doppel Assertion: https://basarat.gitbooks.io/typescript/content/docs/types/type-assertion.html#double-assertion

+0

Ich bin immer noch verwirrt, was ist der Sinn der Zweirichtungsprüfung (A-> B | B-> A) –

+1

'was ist das Punkt der bidirektionalen Kontrolle "Teilsicherheit, z Es ist Ihnen erlaubt, leicht von einer Elternklasse zu einer Kindklasse zu behaupten (weil es sehr wohl polymorph auf eine Kind-Instanz verweist). Sie dürfen jedoch keine sehr unsichere Aussage machen, ohne eine doppelte Aussage zu machen. – basarat

Verwandte Themen