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
|
=== tests/cases/conformance/types/rest/genericRestParameters3.ts ===
declare let f1: (x: string, ...args: [string] | [number, boolean]) => void;
>f1 : Symbol(f1, Decl(genericRestParameters3.ts, 0, 11))
>x : Symbol(x, Decl(genericRestParameters3.ts, 0, 17))
>args : Symbol(args, Decl(genericRestParameters3.ts, 0, 27))
declare let f2: (x: string, y: string) => void;
>f2 : Symbol(f2, Decl(genericRestParameters3.ts, 1, 11))
>x : Symbol(x, Decl(genericRestParameters3.ts, 1, 17))
>y : Symbol(y, Decl(genericRestParameters3.ts, 1, 27))
declare let f3: (x: string, y: number, z: boolean) => void;
>f3 : Symbol(f3, Decl(genericRestParameters3.ts, 2, 11))
>x : Symbol(x, Decl(genericRestParameters3.ts, 2, 17))
>y : Symbol(y, Decl(genericRestParameters3.ts, 2, 27))
>z : Symbol(z, Decl(genericRestParameters3.ts, 2, 38))
declare let f4: (...args: [string, string] | [string, number, boolean]) => void;
>f4 : Symbol(f4, Decl(genericRestParameters3.ts, 3, 11))
>args : Symbol(args, Decl(genericRestParameters3.ts, 3, 17))
declare const tt: [string] | [number, boolean];
>tt : Symbol(tt, Decl(genericRestParameters3.ts, 5, 13))
f1("foo", "abc");
>f1 : Symbol(f1, Decl(genericRestParameters3.ts, 0, 11))
f1("foo", 10, true);
>f1 : Symbol(f1, Decl(genericRestParameters3.ts, 0, 11))
f1("foo", ...tt);
>f1 : Symbol(f1, Decl(genericRestParameters3.ts, 0, 11))
>tt : Symbol(tt, Decl(genericRestParameters3.ts, 5, 13))
f1("foo", 10); // Error
>f1 : Symbol(f1, Decl(genericRestParameters3.ts, 0, 11))
f1("foo"); // Error
>f1 : Symbol(f1, Decl(genericRestParameters3.ts, 0, 11))
f2 = f1;
>f2 : Symbol(f2, Decl(genericRestParameters3.ts, 1, 11))
>f1 : Symbol(f1, Decl(genericRestParameters3.ts, 0, 11))
f3 = f1;
>f3 : Symbol(f3, Decl(genericRestParameters3.ts, 2, 11))
>f1 : Symbol(f1, Decl(genericRestParameters3.ts, 0, 11))
f4 = f1; // Error, misaligned complex rest types
>f4 : Symbol(f4, Decl(genericRestParameters3.ts, 3, 11))
>f1 : Symbol(f1, Decl(genericRestParameters3.ts, 0, 11))
f1 = f2; // Error
>f1 : Symbol(f1, Decl(genericRestParameters3.ts, 0, 11))
>f2 : Symbol(f2, Decl(genericRestParameters3.ts, 1, 11))
f1 = f3; // Error
>f1 : Symbol(f1, Decl(genericRestParameters3.ts, 0, 11))
>f3 : Symbol(f3, Decl(genericRestParameters3.ts, 2, 11))
f1 = f4; // Error, misaligned complex rest types
>f1 : Symbol(f1, Decl(genericRestParameters3.ts, 0, 11))
>f4 : Symbol(f4, Decl(genericRestParameters3.ts, 3, 11))
// Repro from #26110
interface CoolArray<E> extends Array<E> {
>CoolArray : Symbol(CoolArray, Decl(genericRestParameters3.ts, 18, 8))
>E : Symbol(E, Decl(genericRestParameters3.ts, 22, 20))
>Array : Symbol(Array, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --))
>E : Symbol(E, Decl(genericRestParameters3.ts, 22, 20))
hello: number;
>hello : Symbol(CoolArray.hello, Decl(genericRestParameters3.ts, 22, 41))
}
declare function foo<T extends any[]>(cb: (...args: T) => void): void;
>foo : Symbol(foo, Decl(genericRestParameters3.ts, 24, 1))
>T : Symbol(T, Decl(genericRestParameters3.ts, 26, 21))
>cb : Symbol(cb, Decl(genericRestParameters3.ts, 26, 38))
>args : Symbol(args, Decl(genericRestParameters3.ts, 26, 43))
>T : Symbol(T, Decl(genericRestParameters3.ts, 26, 21))
foo<CoolArray<any>>(); // Error
>foo : Symbol(foo, Decl(genericRestParameters3.ts, 24, 1))
>CoolArray : Symbol(CoolArray, Decl(genericRestParameters3.ts, 18, 8))
foo<CoolArray<any>>(100); // Error
>foo : Symbol(foo, Decl(genericRestParameters3.ts, 24, 1))
>CoolArray : Symbol(CoolArray, Decl(genericRestParameters3.ts, 18, 8))
foo<CoolArray<any>>(foo); // Error
>foo : Symbol(foo, Decl(genericRestParameters3.ts, 24, 1))
>CoolArray : Symbol(CoolArray, Decl(genericRestParameters3.ts, 18, 8))
>foo : Symbol(foo, Decl(genericRestParameters3.ts, 24, 1))
function bar<T extends any[]>(...args: T): T {
>bar : Symbol(bar, Decl(genericRestParameters3.ts, 30, 25))
>T : Symbol(T, Decl(genericRestParameters3.ts, 32, 13))
>args : Symbol(args, Decl(genericRestParameters3.ts, 32, 30))
>T : Symbol(T, Decl(genericRestParameters3.ts, 32, 13))
>T : Symbol(T, Decl(genericRestParameters3.ts, 32, 13))
return args;
>args : Symbol(args, Decl(genericRestParameters3.ts, 32, 30))
}
let a = bar(10, 20);
>a : Symbol(a, Decl(genericRestParameters3.ts, 36, 3))
>bar : Symbol(bar, Decl(genericRestParameters3.ts, 30, 25))
let b = bar<CoolArray<number>>(10, 20); // Error
>b : Symbol(b, Decl(genericRestParameters3.ts, 37, 3))
>bar : Symbol(bar, Decl(genericRestParameters3.ts, 30, 25))
>CoolArray : Symbol(CoolArray, Decl(genericRestParameters3.ts, 18, 8))
declare function baz<T>(...args: CoolArray<T>): void;
>baz : Symbol(baz, Decl(genericRestParameters3.ts, 37, 39))
>T : Symbol(T, Decl(genericRestParameters3.ts, 39, 21))
>args : Symbol(args, Decl(genericRestParameters3.ts, 39, 24))
>CoolArray : Symbol(CoolArray, Decl(genericRestParameters3.ts, 18, 8))
>T : Symbol(T, Decl(genericRestParameters3.ts, 39, 21))
declare const ca: CoolArray<number>;
>ca : Symbol(ca, Decl(genericRestParameters3.ts, 40, 13))
>CoolArray : Symbol(CoolArray, Decl(genericRestParameters3.ts, 18, 8))
baz(); // Error
>baz : Symbol(baz, Decl(genericRestParameters3.ts, 37, 39))
baz(1); // Error
>baz : Symbol(baz, Decl(genericRestParameters3.ts, 37, 39))
baz(1, 2); // Error
>baz : Symbol(baz, Decl(genericRestParameters3.ts, 37, 39))
baz(...ca); // Error
>baz : Symbol(baz, Decl(genericRestParameters3.ts, 37, 39))
>ca : Symbol(ca, Decl(genericRestParameters3.ts, 40, 13))
// Repro from #26491
declare function hmm<A extends [] | [number, string]>(...args: A): void;
>hmm : Symbol(hmm, Decl(genericRestParameters3.ts, 45, 11))
>A : Symbol(A, Decl(genericRestParameters3.ts, 49, 21))
>args : Symbol(args, Decl(genericRestParameters3.ts, 49, 54))
>A : Symbol(A, Decl(genericRestParameters3.ts, 49, 21))
hmm(); // okay, A = []
>hmm : Symbol(hmm, Decl(genericRestParameters3.ts, 45, 11))
hmm(1, "s"); // okay, A = [1, "s"]
>hmm : Symbol(hmm, Decl(genericRestParameters3.ts, 45, 11))
hmm("what"); // no error? A = [] | [number, string] ?
>hmm : Symbol(hmm, Decl(genericRestParameters3.ts, 45, 11))
|