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
|
=== tests/cases/conformance/types/spread/objectSpreadUnion.ts ===
// concrete types work
interface A1 { a: number }
>A1 : A1
>a : number
interface A2 { a: string }
>A2 : A2
>a : string
let a12: A1 | A2;
>a12 : A1 | A2
>A1 : A1
>A2 : A2
let result = { ...a12 };
>result : { a: number; } | { a: string; }
>{ ...a12 } : { a: number; } | { a: string; }
>a12 : any
let sn: number | string = result.a;
>sn : string | number
>result.a : string | number
>result : { a: number; } | { a: string; }
>a : string | number
let assignable: { ...(A1 | A2) } = result;
>assignable : { a: number; } | { a: string; }
>A1 : A1
>A2 : A2
>result : { a: number; } | { a: string; }
function tripleUnion<T, U, V>(t: T, u: U, v: V): void {
>tripleUnion : <T, U, V>(t: T, u: U, v: V) => void
>T : T
>U : U
>V : V
>t : T
>T : T
>u : U
>U : U
>v : V
>V : V
let tuv: T | U | V;
>tuv : T | U | V
>T : T
>U : U
>V : V
let result = { ...tuv, id: 'foo' };
>result : { ...T; id: string; } | { ...U; id: string; } | { ...V; id: string; }
>{ ...tuv, id: 'foo' } : { ...T; id: string; } | { ...U; id: string; } | { ...V; id: string; }
>tuv : any
>id : string
>'foo' : "foo"
let expected: { ...T, id: string } | { ...U, id: string } | { ...V, id: string } = result;
>expected : { ...T; id: string; } | { ...U; id: string; } | { ...V; id: string; }
>T : T
>id : string
>U : U
>id : string
>V : V
>id : string
>result : { ...T; id: string; } | { ...U; id: string; } | { ...V; id: string; }
let assignable: { ...(T | U | V), id: string } = result;
>assignable : { ...T; id: string; } | { ...U; id: string; } | { ...V; id: string; }
>T : T
>U : U
>V : V
>id : string
>result : { ...T; id: string; } | { ...U; id: string; } | { ...V; id: string; }
}
function iteratedDoubleUnion<T, U, V>(t: T, u: U, v: V): void {
>iteratedDoubleUnion : <T, U, V>(t: T, u: U, v: V) => void
>T : T
>U : U
>V : V
>t : T
>T : T
>u : U
>U : U
>v : V
>V : V
let tu: T | U;
>tu : T | U
>T : T
>U : U
let uv: U | V;
>uv : U | V
>U : U
>V : V
let result = { ...tu, ...uv, id: 'bar' };
>result : { ...U; id: string; } | { ...T; ...U; id: string; } | { ...T; ...V; id: string; } | { ...U; ...V; id: string; }
>{ ...tu, ...uv, id: 'bar' } : { ...U; id: string; } | { ...T; ...U; id: string; } | { ...T; ...V; id: string; } | { ...U; ...V; id: string; }
>tu : any
>uv : any
>id : string
>'bar' : "bar"
let expected: { ...T, ...U, id: string } | { ...T, ...V, id: string } | { ...U, id: string } | { ...U, ...V, id: string };
>expected : { ...T; ...U; id: string; } | { ...T; ...V; id: string; } | { ...U; id: string; } | { ...U; ...V; id: string; }
>T : T
>U : U
>id : string
>T : T
>V : V
>id : string
>U : U
>id : string
>U : U
>V : V
>id : string
let assignable: { ...(T | U), ...(U | V), id: string } = result;
>assignable : { ...U; id: string; } | { ...T; ...U; id: string; } | { ...T; ...V; id: string; } | { ...U; ...V; id: string; }
>T : T
>U : U
>U : U
>V : V
>id : string
>result : { ...U; id: string; } | { ...T; ...U; id: string; } | { ...T; ...V; id: string; } | { ...U; ...V; id: string; }
}
|