Estoy intentando escribir a máquina. Funciona bien en el escenario de hola mundo. Ahora estoy tratando de usar un módulo npm:
index.ts
=
import _ = require('lodash')
console.log(_.toUpper('Hello, world !'))
Esto no funciona:
tsc index.ts
->Cannot find module 'lodash'. (2307)
node-ts index.js
->Cannot find module 'lodash'. (2307)
Mirar la documentación mecanografiada y en Google no ayudó. Otras preguntas de S / O están sin respuesta ( aquí y aquí ) o no están relacionadas.
Elementos:
- mecanografiado 1.8 último
- Sí, lodash está instalado
npm i --save lodash
y existe en mi sistema de archivos (marcado) - Yo tambien lo hice
typings i --save lodash
- variantes
import * as _ from 'lodash'
oconst _ = require('lodash')
tampoco funcionan - Intenté ajustar las opciones de tsconfig.json como se sugiere en otras respuestas
"moduleResolution": "node"
y"module": "commonjs"
como se sugiere en algunas respuestas, todavía no funciona
¿Cómo consumimos un paquete npm en mecanografiado?
node.js
typescript
npm
tsc
Offirmo
fuente
fuente
///<reference path="../typings/lodash/lodash.d.ts"/>
Respuestas:
[EDITAR] ¡Muchas gracias por esta respuesta! Sin embargo, a partir de 2018, está desactualizado. Lectores, echen un vistazo a las otras respuestas.
Hay varias formas de importar módulos desde npm. Pero si no obtiene mecanografía,
tsc
siempre se quejará de que no puede encontrar el módulo que necesita (incluso si js transpilado realmente funciona).Si tiene mecanografía y no usa a
tsconfig.json
, utilicereference
para importar las mecanografías:/// <reference path="path/to/typings/typings.d.ts" /> import * as _ from 'lodash`; console.log(_.toUpper('Hello, world !'))
Si está utilizando un
tsconfig.json
archivo, asegúrese de incluir su archivo de mecanografía (o no excluirlo, su elección) y haga loimport
mismo en el ejemplo anterior.En el caso de que no haya mecanografía disponible. Tiene dos opciones: escribir el suyo propio en un
.d.ts
archivo o ignorar la verificación de tipos de la biblioteca.Para ignorar por completo la verificación de tipos (esta no es la forma recomendada), importe la biblioteca en una variable de tipo
any
.const _: any = require('lodash'); console.log(_.toUpper('Hello, world !'))
tsc
se quejará de querequire
no existe. Proporcionenode
mecanografía odeclare
descarte el error.fuente
ts-node
siempre que se haga referencia al índice de mecanografía entsconfig.json
[2018/12] Nueva y actualizada respuesta a esta pregunta que hice en 2016, que aún muestra mucha actividad a pesar de tener respuestas desactualizadas.
En pocas palabras, TypeScript requiere información de tipo sobre el código de su paquete (también conocido como " archivos de declaración de tipo ", también conocido como "mecanografía") y le dice con razón que de otro modo estaría perdiendo todo el sentido de TypeScript. Hay varias soluciones para proporcionarlas o rechazarlas, enumeradas aquí en orden de mejores prácticas:
Solución 0 : el módulo ya proporciona las tipificaciones. Si su package.json contiene una línea como esta:
"typings": "dist/index.d.ts",
ya está habilitado para TypeScript. Lo más probable es que no sea el caso si está leyendo esta página, así que continuemos ...
Solución 1 : use mecanografía contribuida por la comunidad de DefinitelyTyped . Para un módulo "foo", intente esto:
si funciona, premio gordo! Ahora tiene la mecanografía y puede usar su módulo. Si npm se queja de que no puede encontrar el módulo @ types / foo, continuemos ...
Solución 2 : proporcione mecanografía personalizada sobre este módulo. (con opción de hacer cero esfuerzo)
"include": [ "./typings-custom/**/*.ts" ]
declare module 'foo'
Su código TypeScript debería compilarse ahora, aunque sin información de tipo (TypeScript considera el módulo foo de tipo "cualquiera").
También puede intentar escribir la información del tipo usted mismo, mirando el documento oficial y / o ejemplos de DefinitelyTyped . Si lo hace, piense en contribuir con sus mecanografías directamente en el módulo (solución 0, si el autor del módulo acepta) o en DefinitelyTyped (solución 1)
fuente
Reference the content of this folder in your tsconfig.json:
da el siguiente error:Unknown compiler option 'include'.
compilerOptions
Probablemente te falten los archivos de declaración .
Consulte DefinitelyTyped para obtener más información.
Prueba esto:
Ahora puede importar archivos.
import _ from 'lodash';
Si el módulo que está importando tiene varias exportaciones , puede hacer esto:
import { Express, Router } from 'express';
Si el módulo que está importando "no tiene una exportación predeterminada" , debe hacer esto:
import * as http from 'http';
fuente
* as _
y no solo_ from 'lodash'
como en el código ES6?import _ from 'lodash';
es mejor en este caso. Actualicé mi respuesta para mostrar diferentes formas de importar y por qué las usaría.* as _
es necesario si el módulo no tiene ninguna exportación predeterminado. El compilador tsc advertirá de esto.export default <...>
declaración. Eche un vistazo a la sección "Exportaciones predeterminadas" de la documentación de los módulos de TypeScript .Funcionó para mí.
En la carpeta de mecanografía, cree un nombre de archivo module-name.d.ts . Contiene:
declare module "module-name";
En tsconfig.json, consulte la carpeta
"typeRoots": [ "./typings", "../node_modules/@types" ]
fuente
In tsconfig.json, refer to the folder
da el siguiente error:Unknown compiler option 'typesRoots'.
Recibí este error y ninguna de las respuestas me funcionó, pero descubro algo cuando quieres trabajar con el módulo de nodo en mecanografiado, instálalo como
$npm install @types/<module_name>
por ejemplo
en lugar de decir
fuente