在其他地方声明时,使用祖先模块中的变量

时间:2014-12-17 14:45:35

标签: javascript typescript

这是我的情况。我加载了一些包含此代码的旧版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内安全地访问它?

1 个答案:

答案 0 :(得分:2)

如果将其添加到TypeScript文件中,它知道x确实存在,您也可以将typeinfo添加到此文件中。 由于declare它不会生成任何代码,因此它只是TypeScript编译器的一些信息。

declare module A {
    var x;
}

您可以在此处找到更多信息:Writing Definition Files