网站搜索

typescript - 从具有相同名称类型的命名空间实例化全局类型


我在全局声明了一个 class A:

class A { }

我有 namespace N,它与其他类型一起也有 class A:

namespace N {
    class A { }
    // other declarations
}

我如何在 namespace N 内实例化全局 class A?

namespace N {
    export class B {
        static getA(): A {   // here 
            return new A();  // and here I want to refer global A, not N.A
        }
    }
}

答案#1

通过强制类型黑客。在 JavaScript 中,你可以通过全局变量访问全局级别的变量,在网页浏览器中是 window,在 node.js 中是 global。对于网页浏览器来说,这很简单。你可以选择你喜欢的语法。

return new (<any>window).A()

或

return new (window as any).A()

当你的应用程序在 node.js 或其他具有另一个全局变量的非浏览器平台上运行时,会复杂一点。我不知道还有更好的解决方案可以通过黑客方式获取全局变量(因为 global 是 TypeScript 中的关键字)。

return new (eval("global")).A()