TypeScript Version: 2.0.8
Code
interface A {tag: "a", a};
interface B {tag: "b", b};
interface C {c};
type ABC1 = (A & C) | (B & C);
let y : ABC1 = {tag:"a", a: "foo", c: "bar"}
if(y.tag === "a")
y.a // this is accepted
type ABC2 = (A | B) & C;
let x : 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.