如何使用相同的名称引用在当前命名空间外声明的命名空间?

时间:2017-08-22 15:51:34

标签: typescript namespaces

考虑以下TypeScript:

export namespace Test {
    export const test = "test";
}
export namespace Wrapper {
    export namespace Test {
        export const value = Test.test; // "<script>".Wrapper.Test has no exported member 'test'.
    }
}

由于TypeScript编译为JavaScript的方式,TestWrapper的第二个声明将创建一个新范围,其中Test仅指向自身。顶级Test在该范围内不可用,至少根据TypeScript类型检查器。

我从另一种语言生成TypeScript,这种类型的命名空间冲突并不重要。但是,在TypeScript中,它会导致编译错误。应用程序仍在运行,因此这似乎是TypeScript类型检查问题,而不是真正的JavaScript运行时问题。

TypeScript中是否有任何已知的解决方法?

我在Gluon issue设置了一个repro。

1 个答案:

答案 0 :(得分:1)

您可以创建别名来克服命名空间冲突:

export namespace Test {
    export const test = "test";
}

import _Test = Test;

export namespace Wrapper {
    export namespace Test {
        export const value = _Test.test;
    }
}