interface A { x: T; } interface A { // error y: T; } module M { interface B> { x: T; } interface B> { // error y: T; } } module M2 { interface A { x: T; } } module M2 { interface A { // ok, different declaration space from other M2.A y: T; } } module M3 { export interface A { x: T; } } module M3 { export interface A { // error y: T; } } interface B { u: T; v: Constraint; // ok } interface B { // ok x: T; y: Constraint; // ok } interface C { x: T; } interface C { // ok y: T; } interface Constraint {}