1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114
|
=== tests/cases/compiler/recursiveArrayNotCircular.ts ===
type Action<T, P> = P extends void ? { type : T } : { type: T, payload: P }
>Action : Action<T, P>
>type : T
>type : T
>payload : P
enum ActionType {
>ActionType : ActionType
Foo,
>Foo : ActionType.Foo
Bar,
>Bar : ActionType.Bar
Baz,
>Baz : ActionType.Baz
Batch
>Batch : ActionType.Batch
}
type ReducerAction =
>ReducerAction : { type: ActionType.Bar; payload: number; } | { type: ActionType.Baz; payload: false; } | { type: ActionType.Baz; payload: true; } | { type: ActionType.Foo; payload: string; } | { type: ActionType.Batch; payload: ReducerAction[]; }
| Action<ActionType.Bar, number>
>ActionType : any
| Action<ActionType.Baz, boolean>
>ActionType : any
| Action<ActionType.Foo, string>
>ActionType : any
| Action<ActionType.Batch, ReducerAction[]>
>ActionType : any
function assertNever(a: never): never {
>assertNever : (a: never) => never
>a : never
throw new Error("Unreachable!");
>new Error("Unreachable!") : Error
>Error : ErrorConstructor
>"Unreachable!" : "Unreachable!"
}
function reducer(action: ReducerAction): void {
>reducer : (action: ReducerAction) => void
>action : ReducerAction
switch(action.type) {
>action.type : ActionType
>action : ReducerAction
>type : ActionType
case ActionType.Bar:
>ActionType.Bar : ActionType.Bar
>ActionType : typeof ActionType
>Bar : ActionType.Bar
const x: number = action.payload;
>x : number
>action.payload : number
>action : { type: ActionType.Bar; payload: number; }
>payload : number
break;
case ActionType.Baz:
>ActionType.Baz : ActionType.Baz
>ActionType : typeof ActionType
>Baz : ActionType.Baz
const y: boolean = action.payload;
>y : boolean
>action.payload : boolean
>action : { type: ActionType.Baz; payload: false; } | { type: ActionType.Baz; payload: true; }
>payload : boolean
break;
case ActionType.Foo:
>ActionType.Foo : ActionType.Foo
>ActionType : typeof ActionType
>Foo : ActionType.Foo
const z: string = action.payload;
>z : string
>action.payload : string
>action : { type: ActionType.Foo; payload: string; }
>payload : string
break;
case ActionType.Batch:
>ActionType.Batch : ActionType.Batch
>ActionType : typeof ActionType
>Batch : ActionType.Batch
action.payload.map(reducer);
>action.payload.map(reducer) : void[]
>action.payload.map : <U>(callbackfn: (value: ReducerAction, index: number, array: ReducerAction[]) => U, thisArg?: any) => U[]
>action.payload : ReducerAction[]
>action : { type: ActionType.Batch; payload: ReducerAction[]; }
>payload : ReducerAction[]
>map : <U>(callbackfn: (value: ReducerAction, index: number, array: ReducerAction[]) => U, thisArg?: any) => U[]
>reducer : (action: ReducerAction) => void
break;
default: return assertNever(action);
>assertNever(action) : never
>assertNever : (a: never) => never
>action : never
}
}
|