Closed
Description
TypeScript Version: 3.4.0-dev.201xxxxx
Search Terms: union, index type
Code
class Test<Props extends Object> {
constructor(public o: Props) {}
get<K extends keyof Props>(k: K) : Props[K] { return this.o[k]; }
}
interface A {t: "A";};
interface B {t: "B";};
type u = Test<A> | Test<B>;
const tmp = new Test<B>({t: 'B'}) as u;
switch(tmp.get('t')) {
case 'A': break;
case 'B': break;
}
Expected behavior:
Code compiles with tmp.get('t')
having type "A" | "B"
.
This works for:
Actual behavior:
Compilation fails with error:
Type '"B"' is not comparable to type '"A"'.
Type of tmp.get('t')
is only "A"
.
Problem is not contained to string literals, but also other types. Enountered this bug using immutable-js Record.get().
Playground Link: playground
Related Issues: None found