Se você tiver algum código como este:
//other.js|ts
console.log("module sideffect")
export function foo() {
}
//main.js|ts
import {foo} from "./other"; // foo is not used
console.log("do something else");
Então JavaScript e TypeScript se comportam de forma diferente neste cenário.
O TypesScript omitirá a importação de "./other"
, e o console.log("module sideeffect")
não será disparado.
Enquanto o JavaScript fará a importação e ela será acionada.
Se por outro lado fizermos a importação assim:
import "./other";
Os efeitos colaterais do módulo serão disparados.
Há uma pergunta relacionada aqui:
Efeitos colaterais nas declarações de importação
e aqui:
módulo de importação para efeitos colaterais com Typescript apenas visando o nó
Ambas falam sobre isso, mas infelizmente ambas as respostas agora apontam para a documentação do TypeScript que não existe mais.
Estou procurando uma razão canônica para o TypeScript fazer essa omissão e se é um comportamento configurável. (Pode-se imaginar um cenário em que o código para de funcionar porque uma importação não é mais usada).
A opção relevante é
verbatimModuleSyntax
. Seu nome é um tanto autoexplicativo, e há mais detalhes na documentação se você seguir esse link, mas, em resumo, ele preserva todos os não-type
import
s como você os escreveu.Não consegui encontrar uma explicação concisa na documentação , mas a
verbatimModuleSyntax
descrição da opção tem alguma justificativa, assim como as notas de versão para recursos relacionados:--verbatimModuleSyntax
em 5.0