tests/cases/compiler/duplicateIdentifiersAcrossContainerBoundaries.ts(2,22): error TS2300: Duplicate identifier 'I'. tests/cases/compiler/duplicateIdentifiersAcrossContainerBoundaries.ts(5,18): error TS2300: Duplicate identifier 'I'. tests/cases/compiler/duplicateIdentifiersAcrossContainerBoundaries.ts(9,21): error TS2300: Duplicate identifier 'f'. tests/cases/compiler/duplicateIdentifiersAcrossContainerBoundaries.ts(12,18): error TS2300: Duplicate identifier 'f'. tests/cases/compiler/duplicateIdentifiersAcrossContainerBoundaries.ts(37,12): error TS2300: Duplicate identifier 'x'. tests/cases/compiler/duplicateIdentifiersAcrossContainerBoundaries.ts(41,16): error TS2300: Duplicate identifier 'x'. ==== tests/cases/compiler/duplicateIdentifiersAcrossContainerBoundaries.ts (6 errors) ==== module M { export interface I { } ~ !!! error TS2300: Duplicate identifier 'I'. } module M { export class I { } // error ~ !!! error TS2300: Duplicate identifier 'I'. } module M { export function f() { } ~ !!! error TS2300: Duplicate identifier 'f'. } module M { export class f { } // error ~ !!! error TS2300: Duplicate identifier 'f'. } module M { function g() { } } module M { export class g { } // no error } module M { export class C { } } module M { function C() { } // no error } module M { export var v = 3; } module M { export var v = 3; // error for redeclaring var in a different parent } class Foo { static x: number; ~ !!! error TS2300: Duplicate identifier 'x'. } module Foo { export var x: number; // error for redeclaring var in a different parent ~ !!! error TS2300: Duplicate identifier 'x'. } module N { export module F { var t; } } declare module N { export function F(); // no error because function is ambient }