尽管从未导入过,但仍定义了命名空间

时间:2017-03-17 20:11:52

标签: typescript typescript2.0

带有导出为命名空间声明的库或打字似乎会自动污染我的代码命名空间,尽管我从未导入它们。

例如:

import * as bar from "exa";

export var t2 = (a:foo.Test) => { 
    console.log(a.doSomething());
}

export class Something {
    public test(c:foo.Test) {
        c.doSomething();
    }
}

Complete example on GitHub

我期望发生的是当我尝试引用" foo"时出现错误,因为我没有明确地导入它或在任何地方定义它。但是,这成功编译。

根据TypeScript 2.0 Handbook,使用导出为命名空间声明导出的命名空间只有在编写脚本时才可用,他们将脚本定义为" a没有导入或导出的文件" 。但是在上面的示例中,我有一个导入和两个导出,所以我不认为它算作脚本?

因此,为什么我能够参考" foo"从我的代码?

这是使用TypeScript 2.2

编译的

1 个答案:

答案 0 :(得分:1)

您只能在没有foo类型位置引用import。尝试在位置使用foo会引发错误。

这是因为TS不想强迫您只编写import以将类型信息放入范围,因为import具有您可能不需要的运行时副作用。

相关问题