【问题标题】:Use a variable from ancestor module when it's declared elsewhere在其他地方声明时使用祖先模块中的变量
【发布时间】:2015-02-16 03:40:44
【问题描述】:

这是我的情况。我加载了一些包含此代码的旧版原生 JavaScript:

window.A = { x: { /* several things live here */ } };

这是重现我的问题的最少代码。实际上,A 是我们的全局“命名空间”对象,x 是一个具有一些我想在我较新的 Typescript 类中访问的旧功能的对象。

所以,在上面运行之后,我试图在嵌套的 Typescript 模块的一个类中访问x,如下所示:

module A {       
    module B {
        export class Item {
            constructor(){
                alert(A.x);
            }
        }
    }
}

Web Essessentials 和 typescriptlang.org 网站可以生成 JavaScript,实际上可以按要求工作,但是 VS2012' 分别 typescriptlang.org 的语法高亮显示两者都抱怨:

类型“typeof A”上不存在属性“x”。

这是有道理的。在this question 中,它显示了您需要如何通知编译器全局变量,所以我尝试添加...

declare var x: any;

...发送至module A,但这无济于事。我也试过...

declare var A.x: any;

...内外module A,但这也无济于事。

那么,我如何以某种方式通知 Typescript 编译器 A.x,以便我可以在 Item 中安全地访问它?

【问题讨论】:

  • 附言。我非常愿意编辑我的问题标题,“当它在其他地方宣布时”提供的信息不是很多,但我很难想出更好的措辞。

标签: javascript typescript


【解决方案1】:

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

declare module A {
    var x;
}

您可以在这里找到更多信息:Writing Definition Files

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-09
    • 2016-01-06
    • 2013-07-01
    • 2021-02-26
    相关资源
    最近更新 更多