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
|
=== tests/cases/compiler/cyclicTypeInstantiation.ts ===
function foo<T>() {
>foo : <T>() => { a: T; b: any; }
>T : T
var x: {
>x : { a: T; b: any; }
a: T;
>a : T
>T : T
b: typeof x;
>b : { a: T; b: any; }
>x : { a: T; b: any; }
};
return x;
>x : { a: T; b: any; }
}
function bar<T>() {
>bar : <T>() => { a: T; b: any; }
>T : T
var x: {
>x : { a: T; b: any; }
a: T;
>a : T
>T : T
b: typeof x;
>b : { a: T; b: any; }
>x : { a: T; b: any; }
};
return x;
>x : { a: T; b: any; }
}
var a = foo<string>();
>a : { a: string; b: any; }
>foo<string>() : { a: string; b: any; }
>foo : <T>() => { a: T; b: any; }
var b = bar<string>();
>b : { a: string; b: any; }
>bar<string>() : { a: string; b: any; }
>bar : <T>() => { a: T; b: any; }
// Relating types of a and b produces instantiations of the cyclic anonymous types in foo and bar
a = b;
>a = b : { a: string; b: any; }
>a : { a: string; b: any; }
>b : { a: string; b: any; }
|