• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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