-
Notifications
You must be signed in to change notification settings - Fork 13.2k
Closed
Labels
BugA bug in TypeScriptA bug in TypeScriptFix AvailableA PR has been opened for this issueA PR has been opened for this issue
Milestone
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
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
BugA bug in TypeScriptA bug in TypeScriptFix AvailableA PR has been opened for this issueA PR has been opened for this issue