//// [genericTypeAliases.ts] type Tree = T | { left: Tree, right: Tree }; var tree: Tree = { left: { left: 0, right: { left: 1, right: 2 }, }, right: 3 }; type Lazy = T | (() => T); var ls: Lazy; ls = "eager"; ls = () => "lazy"; type Foo = T | { x: Foo }; type Bar = U | { x: Bar }; // Deeply instantiated generics var x: Foo; var y: Bar; x = y; y = x; x = "string"; x = { x: "hello" }; x = { x: { x: "world" } }; var z: Foo; z = 42; z = { x: 42 }; z = { x: { x: 42 } }; type Strange = string; // Type parameter not used var s: Strange; s = "hello"; interface Tuple { a: A; b: B; } type Pair = Tuple; interface TaggedPair extends Pair { tag: string; } var p: TaggedPair; p.a = 1; p.b = 2; p.tag = "test"; function f() { type Foo = T | { x: Foo }; var x: Foo; return x; } function g() { type Bar = U | { x: Bar }; var x: Bar; return x; } // Deeply instantiated generics var a = f(); var b = g(); a = b; //// [genericTypeAliases.js] var tree = { left: { left: 0, right: { left: 1, right: 2 } }, right: 3 }; var ls; ls = "eager"; ls = function () { return "lazy"; }; // Deeply instantiated generics var x; var y; x = y; y = x; x = "string"; x = { x: "hello" }; x = { x: { x: "world" } }; var z; z = 42; z = { x: 42 }; z = { x: { x: 42 } }; var s; s = "hello"; var p; p.a = 1; p.b = 2; p.tag = "test"; function f() { var x; return x; } function g() { var x; return x; } // Deeply instantiated generics var a = f(); var b = g(); a = b;