Add fastpath to isRelatedTo for type references (#37481)

* Add fastpath to isRelatedTo for type references

* Do not check intersections or unions to ignore propegating reference flags, properly set comparing jsx flag

* Re-remove unneeded check

* Just check for TypeFlags.Object

* Remove else clause
This commit is contained in:
Wesley Wigham
2020-04-13 15:54:37 -07:00
committed by GitHub
parent 8dd6b3a389
commit edd4e0a42b
5 changed files with 394 additions and 37 deletions

View File

@@ -0,0 +1,36 @@
type Action<T, P> = P extends void ? { type : T } : { type: T, payload: P }
enum ActionType {
Foo,
Bar,
Baz,
Batch
}
type ReducerAction =
| Action<ActionType.Bar, number>
| Action<ActionType.Baz, boolean>
| Action<ActionType.Foo, string>
| Action<ActionType.Batch, ReducerAction[]>
function assertNever(a: never): never {
throw new Error("Unreachable!");
}
function reducer(action: ReducerAction): void {
switch(action.type) {
case ActionType.Bar:
const x: number = action.payload;
break;
case ActionType.Baz:
const y: boolean = action.payload;
break;
case ActionType.Foo:
const z: string = action.payload;
break;
case ActionType.Batch:
action.payload.map(reducer);
break;
default: return assertNever(action);
}
}