Estou tentando escrever. Funciona bem no cenário hello world. Agora estou tentando usar um módulo npm:
index.ts
=
import _ = require('lodash')
console.log(_.toUpper('Hello, world !'))
Isso não funciona:
tsc index.ts
->Cannot find module 'lodash'. (2307)
node-ts index.js
->Cannot find module 'lodash'. (2307)
Olhar para a documentação do typescript e no google não ajudou. Outras questões S / O não foram respondidas ( aqui e aqui ) ou não estão relacionadas.
Elementos:
- datilografado 1.8 mais recente
- Sim, o lodash está instalado
npm i --save lodash
e existe em meu sistema de arquivos (verificado) - Eu também fiz
typings i --save lodash
- variantes
import * as _ from 'lodash'
ouconst _ = require('lodash')
também não funcionam - Tentei ajustar as opções de tsconfig.json conforme sugerido em outras respostas
"moduleResolution": "node"
e"module": "commonjs"
conforme sugerido em algumas respostas, ainda não funciona
Como consumimos um pacote npm em typescript ??
node.js
typescript
npm
tsc
Offirmo
fonte
fonte
///<reference path="../typings/lodash/lodash.d.ts"/>
Respostas:
[EDIT] Muito obrigado por esta resposta! No entanto, em 2018, ele está desatualizado. Leitores, vejam as outras respostas.
Existem várias maneiras de importar módulos do npm. Mas se você não conseguir digitações,
tsc
sempre reclamará que não consegue encontrar o módulo que você está solicitando (mesmo que o js transpilado esteja realmente funcionando).Se você tiver digitações e não usar um
tsconfig.json
, usereference
para importar as digitações:/// <reference path="path/to/typings/typings.d.ts" /> import * as _ from 'lodash`; console.log(_.toUpper('Hello, world !'))
Se você estiver usando um
tsconfig.json
arquivo, certifique-se de ter seu arquivo de digitação incluído (ou não excluído, sua escolha), e faça oimport
mesmo no exemplo anterior.No caso em que não existam tipificações disponíveis. Você tem duas opções: gravar seu próprio
.d.ts
arquivo em um arquivo ou ignorar a verificação de tipo para a biblioteca.Para ignorar completamente a verificação de tipo (esta não é a forma recomendada), importe a biblioteca em uma variável do tipo
any
.const _: any = require('lodash'); console.log(_.toUpper('Hello, world !'))
tsc
vai reclamar querequire
não existe. Forneçanode
digitações oudeclare
descartar o erro.fonte
ts-node
contanto que o índice detsconfig.json
[2018/12] Nova resposta atualizada a esta pergunta que fiz em 2016, que ainda mostra muita atividade apesar de ter respostas desatualizadas.
Para encurtar a história, o TypeScript requer informações de tipo sobre o código do seu pacote (também conhecido como " arquivos de declaração de tipo " ou "tipificações") e, com razão, diz a você que, de outra forma, você estaria perdendo todo o sentido do TypeScript. Existem várias soluções para fornecê-los ou optar por não recebê-los, listados aqui em ordem de prática recomendada:
Solução 0 : o módulo já fornece as digitações. Se seu package.json contiver uma linha como esta:
"typings": "dist/index.d.ts",
já está habilitado para TypeScript. Provavelmente não é o caso se você estiver lendo esta página, então vamos continuar ...
Solução 1 : use tipificações fornecidas pela comunidade do DefinitelyTyped . Para um módulo "foo", tente o seguinte:
se funcionar, jackpot! Agora você tem as digitações e pode usar seu módulo. Se o npm reclamar que não consegue encontrar o módulo @ types / foo, vamos continuar ...
Solução 2 : forneça tipificações personalizadas sobre este módulo. (com a opção de fazer esforço zero)
"include": [ "./typings-custom/**/*.ts" ]
declare module 'foo'
Seu código TypeScript agora deve compilar, embora sem nenhuma informação de tipo (TypeScript considere o módulo foo do tipo "qualquer").
Você também pode tentar escrever as informações de tipo por conta própria, olhando o documento oficial e / ou exemplos do DefinitelyTyped . Se você fizer isso, pense em contribuir com suas digitações diretamente no módulo (solução 0, se o autor do módulo aceitar) ou em DefinitelyTyped (solução 1)
fonte
Reference the content of this folder in your tsconfig.json:
dá o seguinte erro:Unknown compiler option 'include'.
compilerOptions
Você provavelmente está perdendo os arquivos de declaração .
Consulte DefinitelyTyped para obter mais informações.
Experimente isto:
Agora você pode importar.
import _ from 'lodash';
Se o módulo que você está importando tiver várias exportações , você pode fazer isso:
import { Express, Router } from 'express';
Se o módulo que você está importando "não tem exportação padrão", você precisa fazer o seguinte:
import * as http from 'http';
fonte
* as _
e não apenas_ from 'lodash'
como no código ES6?import _ from 'lodash';
é melhor neste caso. Atualizei minha resposta para mostrar diferentes maneiras de importar e por que você os usaria.* as _
é necessário se o módulo não tiver exportação padrão. O compilador tsc avisará sobre isso.export default <...>
instrução. Dê uma olhada na seção "Exportações padrão" da Documentação dos Módulos de Texto Tipo .Funcionou para mim
Na pasta de digitação , crie um nome de arquivo module-name.d.ts . Contém:
declare module "module-name";
Em tsconfig.json, consulte a pasta
"typeRoots": [ "./typings", "../node_modules/@types" ]
fonte
In tsconfig.json, refer to the folder
Unknown compiler option 'typesRoots'.
Tenho recebido este erro e nenhuma das respostas funcionou para mim, mas descobri algo quando você deseja trabalhar com o módulo de nó no script de digitação, instale-os como
por exemplo
ao invés de dizer
fonte