带有导出为命名空间声明的库或打字似乎会自动污染我的代码命名空间,尽管我从未导入它们。
例如:
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();
}
}
我期望发生的是当我尝试引用" foo"时出现错误,因为我没有明确地导入它或在任何地方定义它。但是,这成功编译。
根据TypeScript 2.0 Handbook,使用导出为命名空间声明导出的命名空间只有在编写脚本时才可用,他们将脚本定义为" a没有导入或导出的文件" 。但是在上面的示例中,我有一个导入和两个导出,所以我不认为它算作脚本?
因此,为什么我能够参考" foo"从我的代码?
这是使用TypeScript 2.2
编译的答案 0 :(得分:1)
您只能在没有foo
的类型位置引用import
。尝试在值位置使用foo
会引发错误。
这是因为TS不想强迫您只编写import
以将类型信息放入范围,因为import
具有您可能不需要的运行时副作用。