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
|
=== tests/cases/conformance/types/spread/spreadDuplicate.ts ===
// Repro from #44438
declare let a: { a: string };
>a : { a: string; }
>a : string
declare let b: { a?: string };
>b : { a?: string | undefined; }
>a : string | undefined
declare let c: { a: string | undefined };
>c : { a: string | undefined; }
>a : string | undefined
declare let d: { a?: string | undefined };
>d : { a?: string | undefined; }
>a : string | undefined
declare let t: boolean;
>t : boolean
let a1 = { a: 123, ...a }; // string (Error)
>a1 : { a: string; }
>{ a: 123, ...a } : { a: string; }
>a : number
>123 : 123
>a : { a: string; }
let b1 = { a: 123, ...b }; // string | number
>b1 : { a: string | number; }
>{ a: 123, ...b } : { a: string | number; }
>a : number
>123 : 123
>b : { a?: string | undefined; }
let c1 = { a: 123, ...c }; // string | undefined (Error)
>c1 : { a: string | undefined; }
>{ a: 123, ...c } : { a: string | undefined; }
>a : number
>123 : 123
>c : { a: string | undefined; }
let d1 = { a: 123, ...d }; // string | number
>d1 : { a: string | number; }
>{ a: 123, ...d } : { a: string | number; }
>a : number
>123 : 123
>d : { a?: string | undefined; }
let a2 = { a: 123, ...(t ? a : {}) }; // string | number
>a2 : { a: string | number; }
>{ a: 123, ...(t ? a : {}) } : { a: string | number; }
>a : number
>123 : 123
>(t ? a : {}) : { a: string; } | {}
>t ? a : {} : { a: string; } | {}
>t : boolean
>a : { a: string; }
>{} : {}
let b2 = { a: 123, ...(t ? b : {}) }; // string | number
>b2 : { a: string | number; }
>{ a: 123, ...(t ? b : {}) } : { a: string | number; }
>a : number
>123 : 123
>(t ? b : {}) : { a?: string | undefined; }
>t ? b : {} : { a?: string | undefined; }
>t : boolean
>b : { a?: string | undefined; }
>{} : {}
let c2 = { a: 123, ...(t ? c : {}) }; // string | number
>c2 : { a: string | number; }
>{ a: 123, ...(t ? c : {}) } : { a: string | number; }
>a : number
>123 : 123
>(t ? c : {}) : { a: string | undefined; } | {}
>t ? c : {} : { a: string | undefined; } | {}
>t : boolean
>c : { a: string | undefined; }
>{} : {}
let d2 = { a: 123, ...(t ? d : {}) }; // string | number
>d2 : { a: string | number; }
>{ a: 123, ...(t ? d : {}) } : { a: string | number; }
>a : number
>123 : 123
>(t ? d : {}) : { a?: string | undefined; }
>t ? d : {} : { a?: string | undefined; }
>t : boolean
>d : { a?: string | undefined; }
>{} : {}
|