interface A { x: T } interface B { x: T } interface C extends A> { y: S } interface D extends B> { y: S } var c: C<{ s: string; n: number }> var d: D<{ n: number; s: string }> = c