Definitelytyped: webpack-env.d.ts não compila com node.d.ts

Criado em 9 fev. 2016  ·  6Comentários  ·  Fonte: DefinitelyTyped/DefinitelyTyped

Antes que você pergunte: Sim, eu pesquisei - e encontrei # 6334 - embora isso não resolva o meu problema.

Estou escrevendo um aplicativo da web que usa Webpack. Como resultado, eu preciso acessar webpack-env.d.ts no front end, mas também estou interessado em usar o módulo url do Node (para url.parse ). Se eu exigir webpack-env.d.ts e node.d.ts no mesmo arquivo de referências, previsivelmente ele quebra porque o Node redefine require . IOW, preciso acessar o módulo node.d.ts de url e a definição de require do webpack.

Posso contornar isso usando const url: any = require('url') , embora isso não seja o ideal e eu gostaria de ter tipificações para este módulo. Outra opção seria dividir node.d.ts em seus módulos constituintes e fazer com que o mestre node.d.ts exija cada módulo individual, embora eu não tenha certeza se isso quebraria alguma coisa das muitas pessoas que dependem disso Arquivo de declaração do TypeScript - e eu particularmente não quero hackea-lo localmente.

Alguma sugestão?

Comentários muito úteis

mas e se @types/node for uma dependência de outra dependência (por exemplo, fs-extra , jsdom , shelljs , tape )?
também acabou removendo webpack-env e

if ((module as any).hot) {
...

😢

Todos 6 comentários

Bem, tecnicamente você ainda não está no ambiente de nó e não é correto incluir o arquivo node.d.ts inteiro. Você está usando um pacote npm que atua da mesma forma que o "url" do nó, mas no ambiente do navegador. O que você pode fazer é extrair essas tipificações de node.d.ts e ter um url.d.ts separado, como você já sugeriu. Apenas dividir node.d.ts em módulos menores pode não atender a todas as necessidades, porque as assinaturas podem ser diferentes devido a diferenças de ambiente (Buffers vs Arrays) ou implementações. Eu sugeriria uma digitação independente para este pacote "url".

Eu meio que tive o mesmo problema em que uso incluir typings/index.ts em meu tsconfig.json para incluir todas as digitações. Ao adicionar webpack-env.d.ts e node , o compilador de texto digitado obviamente reclama. Existe uma maneira de contornar isso?

test_index.ts(1,28): error TS2339: Property 'context' does not exist on type 'NodeRequire'.

A maneira que eu "resolvi" foi criar um arquivo de tipagem separado para os módulos específicos de nó que eu queria usar. Um pouco hack, infelizmente.

Acabei removendo webpack-env completamente, pois só precisava de um digitação em todo o meu projeto para isso. Espero que continue assim. Eu tentei sua solução, mas eu realmente não gosto de poluir meus arquivos com referências tanto quanto possível. Obrigado pela resposta

Saurabh Sharma / Engenharia de Qualidade
[email protected] / (925) -878-5722
Yammer, Microsoft
http://www.foklepoint.com

Em 14 de agosto de 2016, às 7h08, Dan [email protected] escreveu:

A maneira que eu "resolvi" foi criar um arquivo de tipagem separado para os módulos específicos de nó que eu queria usar. Um pouco hack, infelizmente.

-
Você está recebendo isto porque comentou.
Responda a este e-mail diretamente, visualize-o no GitHub ou ignore a conversa.

Claro, eu também não :( Mas eu precisava desse módulo, infelizmente. @Foklepoint

mas e se @types/node for uma dependência de outra dependência (por exemplo, fs-extra , jsdom , shelljs , tape )?
também acabou removendo webpack-env e

if ((module as any).hot) {
...

😢

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