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.
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
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 chamadarequire
não será escrita.por exemplo:
emite
Isso responde sua pergunta?