我已经设置了以下模块结构:
module A.B.C.D {
var ajaxLibNS = ajaxLibNS || A.B.1;
var appUtilNS = appUtilNS || A.B.2;
var appUtil = appUtil || new appUtilNS.AppUtil(); //a class that may be found in module A.B.2
export class SomeClass implements ISomeInterface {
//region properties
private ajaxResponse: ajaxLibNS.IAjaxResponse;
}
}
当我编译时,编译器抱怨,"错误TS2095:找不到符号' ajaxLibNS'"
我不明白为什么编译器不会同样抱怨appUtilNS,因为它存在于模块层次结构中的类似位置(即,"两个级别,一个")。然而,编译器没有抱怨,创建appUtil的代码运行得很好。
请有人照亮我吗?谢谢!
答案 0 :(得分:1)
这是您所看到的简化版本:
module A {
export class Foo {}
}
module B1 {
var f = A.Foo;
var x = new f(); // OK
var y: f; // Error, can't find symbol f
}
问题在于,在此示例中,f
仅存在于值命名空间中。 TypeScript有两种不同的名称:类型和值。在编写类型注释时,您需要在类型命名空间中查找;在表达式上下文中,您将查找值命名空间。 var
声明对类型命名空间没有贡献。
import
声明会提供导入名称的两个含义。所以,你可以写这个:
module B2 {
import f = A.Foo; // Change 'var' to 'import'
var x = new f(); // OK
var y: f; // OK
}
请注意,此处生成的代码相同;这只是将A.Foo
的类型名称转换为f
。