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 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164
|
=== tests/cases/compiler/destructuringAssignmentWithDefault.ts ===
const a: { x?: number } = { };
>a : { x?: number | undefined; }
>x : number | undefined
>{ } : {}
let x = 0;
>x : number
>0 : 0
({x = 1} = a);
>({x = 1} = a) : { x?: number | undefined; }
>{x = 1} = a : { x?: number | undefined; }
>{x = 1} : { x?: number; }
>x : number
>1 : 1
>a : { x?: number | undefined; }
// Repro from #26235
function f1(options?: { color?: string, width?: number }) {
>f1 : (options?: { color?: string | undefined; width?: number | undefined; } | undefined) => void
>options : { color?: string | undefined; width?: number | undefined; } | undefined
>color : string | undefined
>width : number | undefined
let { color, width } = options || {};
>color : string | undefined
>width : number | undefined
>options || {} : { color?: string | undefined; width?: number | undefined; }
>options : { color?: string | undefined; width?: number | undefined; } | undefined
>{} : {}
({ color, width } = options || {});
>({ color, width } = options || {}) : { color?: string | undefined; width?: number | undefined; }
>{ color, width } = options || {} : { color?: string | undefined; width?: number | undefined; }
>{ color, width } : { color: string | undefined; width: number | undefined; }
>color : string | undefined
>width : number | undefined
>options || {} : { color?: string | undefined; width?: number | undefined; }
>options : { color?: string | undefined; width?: number | undefined; } | undefined
>{} : {}
let x1 = (options || {}).color;
>x1 : string | undefined
>(options || {}).color : string | undefined
>(options || {}) : { color?: string | undefined; width?: number | undefined; }
>options || {} : { color?: string | undefined; width?: number | undefined; }
>options : { color?: string | undefined; width?: number | undefined; } | undefined
>{} : {}
>color : string | undefined
let x2 = (options || {})["color"];
>x2 : string | undefined
>(options || {})["color"] : string | undefined
>(options || {}) : { color?: string | undefined; width?: number | undefined; }
>options || {} : { color?: string | undefined; width?: number | undefined; }
>options : { color?: string | undefined; width?: number | undefined; } | undefined
>{} : {}
>"color" : "color"
}
function f2(options?: [string?, number?]) {
>f2 : (options?: [string?, number?]) => void
>options : [(string | undefined)?, (number | undefined)?] | undefined
let [str, num] = options || [];
>str : string | undefined
>num : number | undefined
>options || [] : [(string | undefined)?, (number | undefined)?]
>options : [(string | undefined)?, (number | undefined)?] | undefined
>[] : []
[str, num] = options || [];
>[str, num] = options || [] : [(string | undefined)?, (number | undefined)?]
>[str, num] : [string | undefined, number | undefined]
>str : string | undefined
>num : number | undefined
>options || [] : [(string | undefined)?, (number | undefined)?]
>options : [(string | undefined)?, (number | undefined)?] | undefined
>[] : []
let x1 = (options || {})[0];
>x1 : string | undefined
>(options || {})[0] : string | undefined
>(options || {}) : [(string | undefined)?, (number | undefined)?] | {}
>options || {} : [(string | undefined)?, (number | undefined)?] | {}
>options : [(string | undefined)?, (number | undefined)?] | undefined
>{} : {}
>0 : 0
}
function f3(options?: { color: string, width: number }) {
>f3 : (options?: { color: string; width: number; } | undefined) => void
>options : { color: string; width: number; } | undefined
>color : string
>width : number
let { color, width } = options || {};
>color : string | undefined
>width : number | undefined
>options || {} : { color: string; width: number; } | {}
>options : { color: string; width: number; } | undefined
>{} : {}
({ color, width } = options || {});
>({ color, width } = options || {}) : { color: string; width: number; } | {}
>{ color, width } = options || {} : { color: string; width: number; } | {}
>{ color, width } : { color: string | undefined; width: number | undefined; }
>color : string | undefined
>width : number | undefined
>options || {} : { color: string; width: number; } | {}
>options : { color: string; width: number; } | undefined
>{} : {}
let x1 = (options || {}).color;
>x1 : string | undefined
>(options || {}).color : string | undefined
>(options || {}) : { color: string; width: number; } | {}
>options || {} : { color: string; width: number; } | {}
>options : { color: string; width: number; } | undefined
>{} : {}
>color : string | undefined
let x2 = (options || {})["color"];
>x2 : string | undefined
>(options || {})["color"] : string | undefined
>(options || {}) : { color: string; width: number; } | {}
>options || {} : { color: string; width: number; } | {}
>options : { color: string; width: number; } | undefined
>{} : {}
>"color" : "color"
}
function f4(options?: [string, number]) {
>f4 : (options?: [string, number]) => void
>options : [string, number] | undefined
let [str, num] = options || [];
>str : string | undefined
>num : number | undefined
>options || [] : [] | [string, number]
>options : [string, number] | undefined
>[] : []
[str, num] = options || [];
>[str, num] = options || [] : [] | [string, number]
>[str, num] : [string | undefined, number | undefined]
>str : string | undefined
>num : number | undefined
>options || [] : [] | [string, number]
>options : [string, number] | undefined
>[] : []
let x1 = (options || {})[0];
>x1 : string | undefined
>(options || {})[0] : string | undefined
>(options || {}) : [string, number] | {}
>options || {} : [string, number] | {}
>options : [string, number] | undefined
>{} : {}
>0 : 0
}
|