TypeScript Version: 2.0.8
Code
interfaceA{tag: "a",a};interfaceB{tag: "b",b};interfaceC{c};typeABC1=(A&C)|(B&C);lety : ABC1={tag:"a",a: "foo",c: "bar"}if(y.tag==="a")y.a// this is acceptedtypeABC2=(A|B)&C;letx : ABC2={tag:"a",a: "foo",c: "bar"}if(x.tag==="a")x.a// but this is currently an error :(Expected behavior:
After checking x.tag==="a", the type of x should be narrowed to A & C
Actual behavior:
There is no narrowing, so x.a results in a type error.
A workaround is given by ABC1, but in practice, this results in very long and redundant type definitions.
TypeScript Version: 2.0.8
Code
Expected behavior:
After checking
x.tag==="a", the type ofxshould be narrowed toA & CActual behavior:
There is no narrowing, so
x.aresults in a type error.A workaround is given by
ABC1, but in practice, this results in very long and redundant type definitions.