mirror of
https://github.com/microsoft/TypeScript.git
synced 2026-05-25 05:29:07 -05:00
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:
36
tests/cases/compiler/recursiveArrayNotCircular.ts
Normal file
36
tests/cases/compiler/recursiveArrayNotCircular.ts
Normal 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);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user