type S = string const s: S = '' class C { t: T } type Cstring = C const cs: Cstring = new C() class D { t: T u: U } type DT = D // partially specialized type DU = D> // recursive! const dt: DT = new D() const du: DU = new D()