Pesquisa de site

typescript - Instanciar tipo global de namespace que possui tipo com o mesmo nome


Eu tenho uma classe A declarada globalmente:

class A { }

E eu tenho namespace N, que junto com outros tipos tem class A também:

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

Como eu poderia instanciar a classe A global dentro do namespace N ?

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

Resposta #1

Por hack de digitação forçada. Em JavaScript, você pode acessar variáveis no nível global por uma variável global, que no navegador web é window e no node.js é global. Para o navegador web, é fácil. Você pode escolher a sintaxe que preferir.

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

ou

return new (window as any).A()

Um pouco mais complicado é quando seu aplicativo está rodando em node.js ou outras plataformas que não sejam navegadores, que possuem outra variável global. Eu não conheço uma solução mais elegante que vá burlar a obtenção da variável global (porque global é uma palavra-chave em TypeScript).

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