这是我的情况。我加载了一些包含此代码的旧版vanilla:
window.A = { x: { /* several things live here */ } };
这是重现问题的最小代码。实际上A
是我们的全局“命名空间”对象,而x
是一个对象,其中包含我想在我的较新的Typescript类中访问的一些遗留函数。
所以,在上面运行之后,我试图在嵌套的Typescript模块中的类中访问x
,如下所示:
module A {
module B {
export class Item {
constructor(){
alert(A.x);
}
}
}
}
Web Essesntials以及typescriptlang.org网站可以生成实际上可以根据需要工作的JavaScript,但VS2012分别是typescriptlang.org的语法突出显示两者都抱怨:
属性'x'在类型'typeof A'上不存在。
这是有道理的。在this question中,它显示了如何通知编译器全局变量,所以我尝试添加...
declare var x: any;
...到module A
,但这没有用。我也试过......
declare var A.x: any;
......内外module A
,但这也无济于事。
那么,我如何以某种方式通知A.x
的Typescript编译器,以便我可以在Item
内安全地访问它?
答案 0 :(得分:2)
如果将其添加到TypeScript文件中,它知道x确实存在,您也可以将typeinfo添加到此文件中。
由于declare
它不会生成任何代码,因此它只是TypeScript编译器的一些信息。
declare module A {
var x;
}
您可以在此处找到更多信息:Writing Definition Files