=== tests/cases/compiler/bbb.d.ts ===
export interface INode<T> {
>INode : Symbol(INode, Decl(bbb.d.ts, 0, 0))
>T : Symbol(T, Decl(bbb.d.ts, 0, 23))

    data: T;
>data : Symbol(INode.data, Decl(bbb.d.ts, 0, 27))
>T : Symbol(T, Decl(bbb.d.ts, 0, 23))
}

export function create<T>(): () => INode<T>;
>create : Symbol(create, Decl(bbb.d.ts, 2, 1))
>T : Symbol(T, Decl(bbb.d.ts, 4, 23))
>INode : Symbol(INode, Decl(bbb.d.ts, 0, 0))
>T : Symbol(T, Decl(bbb.d.ts, 4, 23))

=== tests/cases/compiler/lib.d.ts ===
export type G<T extends string> = { [P in T]: string };
>G : Symbol(G, Decl(lib.d.ts, --, --))
>T : Symbol(T, Decl(lib.d.ts, --, --))
>P : Symbol(P, Decl(lib.d.ts, --, --))
>T : Symbol(T, Decl(lib.d.ts, --, --))

export enum E {
>E : Symbol(E, Decl(lib.d.ts, --, --))

    A = "a",
>A : Symbol(E.A, Decl(lib.d.ts, --, --))

    B = "b"
>B : Symbol(E.B, Decl(lib.d.ts, --, --))
}

export type T = G<E>;
>T : Symbol(T, Decl(lib.d.ts, --, --))
>G : Symbol(G, Decl(lib.d.ts, --, --))
>E : Symbol(E, Decl(lib.d.ts, --, --))

export type Q = G<E.A>;
>Q : Symbol(Q, Decl(lib.d.ts, --, --))
>G : Symbol(G, Decl(lib.d.ts, --, --))
>E : Symbol(E, Decl(lib.d.ts, --, --))
>A : Symbol(E.A, Decl(lib.d.ts, --, --))

=== tests/cases/compiler/index.ts ===
import { T, Q } from "./lib";
>T : Symbol(T, Decl(index.ts, 0, 8))
>Q : Symbol(Q, Decl(index.ts, 0, 11))

import { create } from "./bbb";
>create : Symbol(create, Decl(index.ts, 1, 8))

export const fun = create<T>();
>fun : Symbol(fun, Decl(index.ts, 3, 12))
>create : Symbol(create, Decl(index.ts, 1, 8))
>T : Symbol(T, Decl(index.ts, 0, 8))

export const fun2 = create<Q>();
>fun2 : Symbol(fun2, Decl(index.ts, 5, 12))
>create : Symbol(create, Decl(index.ts, 1, 8))
>Q : Symbol(Q, Decl(index.ts, 0, 11))

