Ao escrever um script independente de DOM/Node, é útil definir a types
propriedade do tsconfig
arquivo como []
, para garantir que você não use acidentalmente nenhum global específico do ambiente.
Infelizmente, console
é considerado um fenômeno global.
Até onde sei, não há valor que possa ser adicionado lib
a isso console
sem também incluir um monte de outras coisas.
Existe uma maneira de fazer isso apenas com o tsconfig? Ou terei que criar um d.ts
arquivo que descreva o console e usá-lo?
Dei uma olhada na documentação da biblioteca em https://www.typescriptlang.org/tsconfig/#lib , mas não vejo nada lá (ou no código-fonte relacionado) que pareça definir uma Console
interface.
O TypeScript não oferece muito suporte a código independente de tempo de execução. Diversos problemas foram registrados no GitHub ao longo dos anos, como microsoft/TypeScript#21965 , microsoft/TypeScript#36057 , microsoft/TypeScript#52433 , microsoft/TypeScript#53971 e microsoft/TypeScript#60464 . Esses problemas tendem a ser encerrados como limitações de design ou deixados em aberto como sugestões de recursos, e nada foi feito até o momento. O principal problema em tentar oferecer suporte a essas coisas em geral é que dá muito trabalho tentar escrever tipos estáticos que suportem múltiplos tempos de execução e ainda sejam úteis. Não há mecanismo para oferecer suporte a "uniões" de bibliotecas (por exemplo, verificar se
document
existe e usar o resultado para fazer coisas comaddEventListener
). E as "interseções" de bibliotecas seriam rapidamente reduzidas a praticamente nada (ou todos os tipos acabariam comundefined
on-it também).Seu caso de uso específico se parece com microsoft/TypeScript#53971 , onde
lib.dom.d.ts
seria dividido em "pedaços" que visam partes específicas da funcionalidade, algumas das quais presumivelmente poderiam estar presentes em tempos de execução que não sejam de navegador. Se isso fosse implementado, você presumivelmente poderia incluirdom.console
ou algo parecido. Mas, novamente, não faz parte da linguagem. Essa questão tem apenas alguns votos 👍; não parece que pessoas suficientes escrevendo código TypeScript tenham esse tipo de caso de uso, então é bem improvável que refatorem uma das principais bibliotecas para suportá-lo.Na ausência de qualquer tipo de suporte integrado ou fornecido, você terá que lidar com isso sozinho. A abordagem mais fácil seria copiar a seção relevante para
lib.dom.d.ts
o seu próprio arquivo de declaração e incluir:Não é uma ótima solução (você tem que fazer a manutenção sozinho, por exemplo), mas pelo menos é possível.