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()
