1//// [instantiationExpressions.ts] 2declare function fx<T>(x: T): T; 3declare function fx<T>(x: T, n: number): T; 4declare function fx<T, U>(t: [T, U]): [T, U]; 5 6function f1() { 7 let f0 = fx<>; // Error 8 let f1 = fx<string>; // { (x: string): string; (x: string, n: number): string; } 9 let f2 = fx<string, number>; // (t: [string, number]) => [string, number] 10 let f3 = fx<string, number, boolean>; // Error 11} 12 13type T10 = typeof fx<>; // Error 14type T11 = typeof fx<string>; // { (x: string): string; (x: string, n: number): string; } 15type T12 = typeof fx<string, number>; // (t: [string, number]) => [string, number] 16type T13 = typeof fx<string, number, boolean>; // Error 17 18function f2() { 19 const A0 = Array<>; // Error 20 const A1 = Array<string>; // new (...) => string[] 21 const A2 = Array<string, number>; // Error 22} 23 24type T20 = typeof Array<>; // Error 25type T21 = typeof Array<string>; // new (...) => string[] 26type T22 = typeof Array<string, number>; // Error 27 28declare class C<T> { 29 constructor(x: T); 30 static f<U>(x: U): U[]; 31} 32 33function f3() { 34 let c1 = C<string>; // { new (x: string): C<string>; f<U>(x: U): T[]; prototype: C<any>; } 35 let f1 = C.f<string>; // (x: string) => string[] 36} 37 38function f10(f: { <T>(a: T): T, <U>(a: U, b: number): U[] }) { 39 let fs = f<string>; // { (a: string): string; (a: string, b: number): string[]; } 40} 41 42function f11(f: { <T>(a: T): T, (a: string, b: number): string[] }) { 43 let fs = f<string>; // (a: string) => string 44} 45 46function f12(f: { <T>(a: T): T, x: string }) { 47 let fs = f<string>; // { (a: string): string; x: string; } 48} 49 50function f13(f: { x: string, y: string }) { 51 let fs = f<string>; // Error, no applicable signatures 52} 53 54function f14(f: { new <T>(a: T): T, new <U>(a: U, b: number): U[] }) { 55 let fs = f<string>; // { new (a: string): string; new (a: string, b: number): string[]; } 56} 57 58function f15(f: { new <T>(a: T): T, <U>(a: U, b: number): U[] }) { 59 let fs = f<string>; // { new (a: string): string; (a: string, b: number): string[]; } 60} 61 62function f16(f: { new <T>(a: T): T, (a: string, b: number): string[] }) { 63 let fs = f<string>; // new (a: string) => string 64} 65 66function f17(f: { <T>(a: T): T, new (a: string, b: number): string[] }) { 67 let fs = f<string>; // (a: string) => string 68} 69 70function f20(f: (<T>(a: T) => T) & (<U>(a: U, b: number) => U[])) { 71 let fs = f<string>; // ((a: string) => string) & ((a: string, b: number) => string[]]) 72} 73 74function f21(f: (<T>(a: T) => T) & ((a: string, b: number) => string[])) { 75 let fs = f<string>; // (a: string) => string 76} 77 78function f22(f: (<T>(a: T) => T) & { x: string }) { 79 let fs = f<string>; // ((a: string) => string) & { x: string } 80} 81 82function f23(f: { x: string } & { y: string }) { 83 let fs = f<string>; // Error, no applicable signatures 84} 85 86function f24(f: (new <T>(a: T) => T) & (new <U>(a: U, b: number) => U[])) { 87 let fs = f<string>; // (new (a: string) => string) & ((a: string, b: number) => string[]]) 88} 89 90function f25(f: (new <T>(a: T) => T) & (<U>(a: U, b: number) => U[])) { 91 let fs = f<string>; // (new (a: string) => string) & ((a: string, b: number) => string[]]) 92} 93 94function f26(f: (new <T>(a: T) => T) & ((a: string, b: number) => string[])) { 95 let fs = f<string>; // new (a: string) => string 96} 97 98function f27(f: (<T>(a: T) => T) & (new (a: string, b: number) => string[])) { 99 let fs = f<string>; // (a: string) => string 100} 101 102function f30(f: (<T>(a: T) => T) | (<U>(a: U, b: number) => U[])) { 103 let fs = f<string>; // ((a: string) => string) | ((a: string, b: number) => string[]]) 104} 105 106function f31(f: (<T>(a: T) => T) | ((a: string, b: number) => string[])) { 107 let fs = f<string>; // Error, '(a: string, b: number) => string[]' has no applicable signatures 108} 109 110function f32(f: (<T>(a: T) => T) | { x: string }) { 111 let fs = f<string>; // ((a: string) => string) | { x: string } 112} 113 114function f33(f: { x: string } | { y: string }) { 115 let fs = f<string>; // Error, no applicable signatures 116} 117 118function f34(f: (new <T>(a: T) => T) | (new <U>(a: U, b: number) => U[])) { 119 let fs = f<string>; // (new (a: string) => string) | ((a: string, b: number) => string[]]) 120} 121 122function f35(f: (new <T>(a: T) => T) | (<U>(a: U, b: number) => U[])) { 123 let fs = f<string>; // (new (a: string) => string) | ((a: string, b: number) => string[]]) 124} 125 126function f36(f: (new <T>(a: T) => T) | ((a: string, b: number) => string[])) { 127 let fs = f<string>; // Error, '(a: string, b: number) => string[]' has no applicable signatures 128} 129 130function f37(f: (<T>(a: T) => T) | (new (a: string, b: number) => string[])) { 131 let fs = f<string>; // Error, 'new (a: string, b: number) => string[]' has no applicable signatures 132} 133 134function f38<T extends (<A>(x: A) => A) | (<B>(x: B) => B[]), U>(f: T | U | (<C>(x: C) => C[][])) { 135 let fs = f<string>; // U | ((x: string) => string) | ((x: string) => string[]) | ((x: string) => string[][]) 136} 137 138function makeBox<T>(value: T) { 139 return { value }; 140} 141 142type BoxFunc<T> = typeof makeBox<T>; // (value: T) => { value: T } 143type StringBoxFunc = BoxFunc<string>; // (value: string) => { value: string } 144 145type Box<T> = ReturnType<typeof makeBox<T>>; // { value: T } 146type StringBox = Box<string>; // { value: string } 147 148type A<U> = InstanceType<typeof Array<U>>; // U[] 149 150declare const g1: { 151 <T>(a: T): { a: T }; 152 new <U>(b: U): { b: U }; 153} 154 155type T30<V> = typeof g1<V>; // { (a: V) => { a: V }; new (b: V) => { b: V }; } 156type T31<A> = ReturnType<T30<A>>; // { a: A } 157type T32<B> = InstanceType<T30<B>>; // { b: B } 158 159declare const g2: { 160 <T extends string>(a: T): T; 161 new <T extends number>(b: T): T; 162} 163 164type T40<U extends string> = typeof g2<U>; // Error 165type T41<U extends number> = typeof g2<U>; // Error 166 167declare const g3: { 168 <T extends string>(a: T): T; 169 new <T extends number, Q>(b: T): T; 170} 171 172type T50<U extends string> = typeof g3<U>; // (a: U) => U 173type T51<U extends number> = typeof g3<U, any>; // (b: U) => U 174 175 176//// [instantiationExpressions.js] 177"use strict"; 178function f1() { 179 var f0 = fx; // Error 180 var f1 = (fx); // { (x: string): string; (x: string, n: number): string; } 181 var f2 = (fx); // (t: [string, number]) => [string, number] 182 var f3 = (fx); // Error 183} 184function f2() { 185 var A0 = Array; // Error 186 var A1 = (Array); // new (...) => string[] 187 var A2 = (Array); // Error 188} 189function f3() { 190 var c1 = (C); // { new (x: string): C<string>; f<U>(x: U): T[]; prototype: C<any>; } 191 var f1 = (C.f); // (x: string) => string[] 192} 193function f10(f) { 194 var fs = (f); // { (a: string): string; (a: string, b: number): string[]; } 195} 196function f11(f) { 197 var fs = (f); // (a: string) => string 198} 199function f12(f) { 200 var fs = (f); // { (a: string): string; x: string; } 201} 202function f13(f) { 203 var fs = (f); // Error, no applicable signatures 204} 205function f14(f) { 206 var fs = (f); // { new (a: string): string; new (a: string, b: number): string[]; } 207} 208function f15(f) { 209 var fs = (f); // { new (a: string): string; (a: string, b: number): string[]; } 210} 211function f16(f) { 212 var fs = (f); // new (a: string) => string 213} 214function f17(f) { 215 var fs = (f); // (a: string) => string 216} 217function f20(f) { 218 var fs = (f); // ((a: string) => string) & ((a: string, b: number) => string[]]) 219} 220function f21(f) { 221 var fs = (f); // (a: string) => string 222} 223function f22(f) { 224 var fs = (f); // ((a: string) => string) & { x: string } 225} 226function f23(f) { 227 var fs = (f); // Error, no applicable signatures 228} 229function f24(f) { 230 var fs = (f); // (new (a: string) => string) & ((a: string, b: number) => string[]]) 231} 232function f25(f) { 233 var fs = (f); // (new (a: string) => string) & ((a: string, b: number) => string[]]) 234} 235function f26(f) { 236 var fs = (f); // new (a: string) => string 237} 238function f27(f) { 239 var fs = (f); // (a: string) => string 240} 241function f30(f) { 242 var fs = (f); // ((a: string) => string) | ((a: string, b: number) => string[]]) 243} 244function f31(f) { 245 var fs = (f); // Error, '(a: string, b: number) => string[]' has no applicable signatures 246} 247function f32(f) { 248 var fs = (f); // ((a: string) => string) | { x: string } 249} 250function f33(f) { 251 var fs = (f); // Error, no applicable signatures 252} 253function f34(f) { 254 var fs = (f); // (new (a: string) => string) | ((a: string, b: number) => string[]]) 255} 256function f35(f) { 257 var fs = (f); // (new (a: string) => string) | ((a: string, b: number) => string[]]) 258} 259function f36(f) { 260 var fs = (f); // Error, '(a: string, b: number) => string[]' has no applicable signatures 261} 262function f37(f) { 263 var fs = (f); // Error, 'new (a: string, b: number) => string[]' has no applicable signatures 264} 265function f38(f) { 266 var fs = (f); // U | ((x: string) => string) | ((x: string) => string[]) | ((x: string) => string[][]) 267} 268function makeBox(value) { 269 return { value: value }; 270} 271 272 273//// [instantiationExpressions.d.ts] 274declare function fx<T>(x: T): T; 275declare function fx<T>(x: T, n: number): T; 276declare function fx<T, U>(t: [T, U]): [T, U]; 277declare function f1(): void; 278type T10 = typeof fx; 279type T11 = typeof fx<string>; 280type T12 = typeof fx<string, number>; 281type T13 = typeof fx<string, number, boolean>; 282declare function f2(): void; 283type T20 = typeof Array; 284type T21 = typeof Array<string>; 285type T22 = typeof Array<string, number>; 286declare class C<T> { 287 constructor(x: T); 288 static f<U>(x: U): U[]; 289} 290declare function f3(): void; 291declare function f10(f: { 292 <T>(a: T): T; 293 <U>(a: U, b: number): U[]; 294}): void; 295declare function f11(f: { 296 <T>(a: T): T; 297 (a: string, b: number): string[]; 298}): void; 299declare function f12(f: { 300 <T>(a: T): T; 301 x: string; 302}): void; 303declare function f13(f: { 304 x: string; 305 y: string; 306}): void; 307declare function f14(f: { 308 new <T>(a: T): T; 309 new <U>(a: U, b: number): U[]; 310}): void; 311declare function f15(f: { 312 new <T>(a: T): T; 313 <U>(a: U, b: number): U[]; 314}): void; 315declare function f16(f: { 316 new <T>(a: T): T; 317 (a: string, b: number): string[]; 318}): void; 319declare function f17(f: { 320 <T>(a: T): T; 321 new (a: string, b: number): string[]; 322}): void; 323declare function f20(f: (<T>(a: T) => T) & (<U>(a: U, b: number) => U[])): void; 324declare function f21(f: (<T>(a: T) => T) & ((a: string, b: number) => string[])): void; 325declare function f22(f: (<T>(a: T) => T) & { 326 x: string; 327}): void; 328declare function f23(f: { 329 x: string; 330} & { 331 y: string; 332}): void; 333declare function f24(f: (new <T>(a: T) => T) & (new <U>(a: U, b: number) => U[])): void; 334declare function f25(f: (new <T>(a: T) => T) & (<U>(a: U, b: number) => U[])): void; 335declare function f26(f: (new <T>(a: T) => T) & ((a: string, b: number) => string[])): void; 336declare function f27(f: (<T>(a: T) => T) & (new (a: string, b: number) => string[])): void; 337declare function f30(f: (<T>(a: T) => T) | (<U>(a: U, b: number) => U[])): void; 338declare function f31(f: (<T>(a: T) => T) | ((a: string, b: number) => string[])): void; 339declare function f32(f: (<T>(a: T) => T) | { 340 x: string; 341}): void; 342declare function f33(f: { 343 x: string; 344} | { 345 y: string; 346}): void; 347declare function f34(f: (new <T>(a: T) => T) | (new <U>(a: U, b: number) => U[])): void; 348declare function f35(f: (new <T>(a: T) => T) | (<U>(a: U, b: number) => U[])): void; 349declare function f36(f: (new <T>(a: T) => T) | ((a: string, b: number) => string[])): void; 350declare function f37(f: (<T>(a: T) => T) | (new (a: string, b: number) => string[])): void; 351declare function f38<T extends (<A>(x: A) => A) | (<B>(x: B) => B[]), U>(f: T | U | (<C>(x: C) => C[][])): void; 352declare function makeBox<T>(value: T): { 353 value: T; 354}; 355type BoxFunc<T> = typeof makeBox<T>; 356type StringBoxFunc = BoxFunc<string>; 357type Box<T> = ReturnType<typeof makeBox<T>>; 358type StringBox = Box<string>; 359type A<U> = InstanceType<typeof Array<U>>; 360declare const g1: { 361 <T>(a: T): { 362 a: T; 363 }; 364 new <U>(b: U): { 365 b: U; 366 }; 367}; 368type T30<V> = typeof g1<V>; 369type T31<A> = ReturnType<T30<A>>; 370type T32<B> = InstanceType<T30<B>>; 371declare const g2: { 372 <T extends string>(a: T): T; 373 new <T extends number>(b: T): T; 374}; 375type T40<U extends string> = typeof g2<U>; 376type T41<U extends number> = typeof g2<U>; 377declare const g3: { 378 <T extends string>(a: T): T; 379 new <T extends number, Q>(b: T): T; 380}; 381type T50<U extends string> = typeof g3<U>; 382type T51<U extends number> = typeof g3<U, any>; 383