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 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140
|
=== tests/cases/conformance/expressions/optionalChaining/optionalChainingInference.ts ===
// https://github.com/microsoft/TypeScript/issues/34579
declare function unbox<T>(box: { value: T | undefined }): T;
>unbox : <T>(box: { value: T | undefined;}) => T
>box : { value: T | undefined; }
>value : T
declare const su: string | undefined;
>su : string
declare const fnu: (() => number) | undefined;
>fnu : () => number
declare const osu: { prop: string } | undefined;
>osu : { prop: string; }
>prop : string
declare const ofnu: { prop: () => number } | undefined;
>ofnu : { prop: () => number; }
>prop : () => number
const b1 = { value: su?.length };
>b1 : { value: number; }
>{ value: su?.length } : { value: number; }
>value : number
>su?.length : number
>su : string
>length : number
const v1: number = unbox(b1);
>v1 : number
>unbox(b1) : number
>unbox : <T>(box: { value: T; }) => T
>b1 : { value: number; }
const b2 = { value: su?.length as number | undefined };
>b2 : { value: number; }
>{ value: su?.length as number | undefined } : { value: number; }
>value : number
>su?.length as number | undefined : number
>su?.length : number
>su : string
>length : number
const v2: number = unbox(b2);
>v2 : number
>unbox(b2) : number
>unbox : <T>(box: { value: T; }) => T
>b2 : { value: number; }
const b3: { value: number | undefined } = { value: su?.length };
>b3 : { value: number | undefined; }
>value : number
>{ value: su?.length } : { value: number; }
>value : number
>su?.length : number
>su : string
>length : number
const v3: number = unbox(b3);
>v3 : number
>unbox(b3) : number
>unbox : <T>(box: { value: T; }) => T
>b3 : { value: number; }
const b4 = { value: fnu?.() };
>b4 : { value: number; }
>{ value: fnu?.() } : { value: number; }
>value : number
>fnu?.() : number
>fnu : () => number
const v4: number = unbox(b4);
>v4 : number
>unbox(b4) : number
>unbox : <T>(box: { value: T; }) => T
>b4 : { value: number; }
const b5 = { value: su?.["length"] };
>b5 : { value: number; }
>{ value: su?.["length"] } : { value: number; }
>value : number
>su?.["length"] : number
>su : string
>"length" : "length"
const v5: number = unbox(b5);
>v5 : number
>unbox(b5) : number
>unbox : <T>(box: { value: T; }) => T
>b5 : { value: number; }
const b6 = { value: osu?.prop.length };
>b6 : { value: number; }
>{ value: osu?.prop.length } : { value: number; }
>value : number
>osu?.prop.length : number
>osu?.prop : string
>osu : { prop: string; }
>prop : string
>length : number
const v6: number = unbox(b6);
>v6 : number
>unbox(b6) : number
>unbox : <T>(box: { value: T; }) => T
>b6 : { value: number; }
const b7 = { value: osu?.prop["length"] };
>b7 : { value: number; }
>{ value: osu?.prop["length"] } : { value: number; }
>value : number
>osu?.prop["length"] : number
>osu?.prop : string
>osu : { prop: string; }
>prop : string
>"length" : "length"
const v7: number = unbox(b7);
>v7 : number
>unbox(b7) : number
>unbox : <T>(box: { value: T; }) => T
>b7 : { value: number; }
const b8 = { value: ofnu?.prop() };
>b8 : { value: number; }
>{ value: ofnu?.prop() } : { value: number; }
>value : number
>ofnu?.prop() : number
>ofnu?.prop : () => number
>ofnu : { prop: () => number; }
>prop : () => number
const v8: number = unbox(b8);
>v8 : number
>unbox(b8) : number
>unbox : <T>(box: { value: T; }) => T
>b8 : { value: number; }
|