node.js - node - typescript example
¿Cómo consumir módulos npm de mecanografiado? (4)
Estoy dando una oportunidad al mecanografiado. Funciona bien en el hola escenario mundial. 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)
Cannot find module ''lodash''. (2307)
-
node-ts index.js
->Cannot find module ''lodash''. (2307)
Cannot find module ''lodash''. (2307)
Mirar la documentación mecanografiada y en google no ayudó. Otras preguntas de S / O no tienen respuesta ( here y here ) o no están relacionadas.
Elementos:
- mecanografiado 1.8 más reciente
-
Sí, lodash está instalado
npm i --save lodash
y existe en mi sistema de archivos (marcado) -
También hice
typings i --save lodash
-
las 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?
A mi me funciono.
- Cree una carpeta llamada "tipings".
-
En la carpeta de tipings, cree un nombre de archivo nombre -módulo.d.ts . Contiene:
declare module "module-name";
-
En tsconfig.json, consulte la carpeta
"typesRoots": [ "./typings", "../node_modules/@types" ]
[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 "tipings") y le dice con razón que de lo contrario estaría perdiendo todo el punto de TypeScript. Existen varias soluciones para proporcionarlas o rechazarlas, enumeradas aquí en orden de mejores prácticas:
Solución 0 : el módulo ya proporciona los tipings. 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 : utilice tipings aportados por la comunidad de DefinitelyTyped . Para un módulo "foo", intente esto:
npm add -D @types/foo
si funciona, premio gordo! Ahora tiene los tipings 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 tipificaciones personalizadas sobre este módulo. (con una opción para hacer cero esfuerzo)
- Cree una carpeta llamada "typings-custom" en la raíz de su proyecto
- Consulte el contenido de esta carpeta en su tsconfig.json:
"include": [
"./typings-custom/**/*.ts"
]
- Cree un archivo con este nombre exacto: foo.d.ts [foo = el nombre del módulo] con el contenido:
declare module ''foo''
Su código TypeScript ahora debe compilarse, aunque NO tenga información de tipo (TypeScript considera el módulo foo de tipo "any").
También puede intentar escribir la información de tipo usted mismo, mirando el documento oficial y / o ejemplos de DefinitelyTyped . Si lo hace, piense en contribuir sus tipings directamente en el módulo (solución 0, si el autor del módulo lo acepta) o en DefinitelyTyped (solución 1)
[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 tipings,
tsc
siempre se quejará de que no puede encontrar el módulo que necesita (incluso si js transpilado
realmente
funciona).
-
Si tiene tipings y no utiliza
tsconfig.json
, use lareference
para importar los tipings:/// <reference path="path/to/typings/typings.d.ts" /> import * as _ from ''lodash`; console.log(_.toUpper(''Hello, world !''))
-
Si está utilizando un archivo
tsconfig.json
, asegúrese de incluir su archivo de tipificación (o no excluirlo, según su elección), y realice laimport
como en el ejemplo anterior.
En el caso de que no haya tipings disponibles.
Tiene dos opciones: escribir la suya propia en un archivo
.d.ts
o ignorar la verificación de tipos para la biblioteca.
Para ignorar por completo la comprobació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 que
require
no existe.
Proporcione tipings de
node
o
declare
que descarta el error.
Probablemente te faltan los archivos de declaración .
Ver DefinitelyTyped para más información.
Prueba esto:
npm install --save lodash
npm install --save @types/lodash
Ahora puedes importar.
import _ from ''lodash'';
Si el módulo que está importando tiene múltiples 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'';