Typescript: Declarar variável como tipo de módulo externo sem importação

Criado em 8 set. 2015  ·  3Comentários  ·  Fonte: microsoft/TypeScript

Ei,

É possível escrever um módulo externo (commonjs) "A", então no código de outro módulo "B", declarar uma variável como sendo tipo do módulo "A" sem usar import que acaba exigindo o módulo "A".

O motivo pelo qual quero fazer isso é que estarei passando uma referência ao módulo "A" para o construtor de uma classe em outro módulo "B", porque quero que o módulo "A" seja um singleton. Mas eu quero digitar o argumento no construtor daquele do módulo "A", como se o módulo "A" tivesse sido importado usando import A = require ("A");

A razão pela qual quero um módulo singleton é que este módulo pode conter instâncias de classes que gerenciam conexões de banco de dados, etc, e eu realmente não quero que eles sejam reinicializados cada vez que tenho que importar; Eu quero ser capaz de distribuí-los ao invés de confiar na mágica potencial do "cache de módulo de nó".

Existe uma maneira de fazer isso? Já pensei em outras maneiras de alcançar o que desejo, mas parece a mais simples, se possível.

Question

Comentários muito úteis

As importações de módulo são eliminadas se não forem usadas em uma posição de valor. portanto, se a importação do módulo A for usada apenas em uma posição de tipo, a chamada require não será escrita.

por exemplo:

// B.ts
import s = require("./A");
var x: typeof s;

emite

var x;

Isso responde sua pergunta?

Todos 3 comentários

As importações de módulo são eliminadas se não forem usadas em uma posição de valor. portanto, se a importação do módulo A for usada apenas em uma posição de tipo, a chamada require não será escrita.

por exemplo:

// B.ts
import s = require("./A");
var x: typeof s;

emite

var x;

Isso responde sua pergunta?

Oh isso é ótimo! Definitivamente responde à minha pergunta. Não consegui encontrar isso na documentação, então agradeço muito por sua ajuda. :)

Oi pessoal,
Tenho uma pergunta que vai no mesmo sentido. Tentei a solução acima, mas agora funcionou para mim.
Estou importando classes de um módulo webpack parent import {A, B} from "parent";
Eu simplesmente quero chamar o construtor para essas classes. Tentei const a = A ({data: 1}); Isso não dá nenhum erro de TS na compilação. Mas ele quebra no javascript do tempo de execução, dizendo: O erro de tipo A não é um construtor.

Preciso criar tipos personalizados e adicioná-los em devDependancies? Ou existe uma maneira específica de exportar meu módulo "pai" como o padrão de exportação.

Qualquer ajuda é apreciada.

Saúde,
Sudeep

Esta página foi útil?
0 / 5 - 0 avaliações