Je tente une écriture dactylographiée. Cela fonctionne bien sur la scène Hello World. J'essaye maintenant d'utiliser un module npm:
index.ts
=
import _ = require('lodash')
console.log(_.toUpper('Hello, world !'))
Cela ne fonctionne pas:
tsc index.ts
->Cannot find module 'lodash'. (2307)
node-ts index.js
->Cannot find module 'lodash'. (2307)
Regarder la documentation dactylographiée et dans Google n'a pas aidé. D'autres questions S / O sont soit sans réponse ( ici et ici ), soit sans rapport.
Éléments :
- typescript 1.8 dernier
- Oui, lodash est installé
npm i --save lodash
et existe dans mon système de fichiers (coché) - J'ai aussi fait
typings i --save lodash
- variantes
import * as _ from 'lodash'
ouconst _ = require('lodash')
ne fonctionnent pas non plus - J'ai essayé de peaufiner les options tsconfig.json comme suggéré dans d'autres réponses
"moduleResolution": "node"
et"module": "commonjs"
comme suggéré dans certaines réponses, cela ne fonctionne toujours pas
Comment consommer un package npm en typographie ??
node.js
typescript
npm
tsc
Offirmo
la source
la source
///<reference path="../typings/lodash/lodash.d.ts"/>
Réponses:
[EDIT] Merci beaucoup pour cette réponse! Cependant, à partir de 2018, il est obsolète. Lecteurs, jetez un œil aux autres réponses.
Il existe plusieurs façons d'importer des modules depuis npm. Mais si vous n'obtenez pas de dactylographie,
tsc
se plaindra toujours qu'il ne trouve pas le module dont vous avez besoin (même si transpiled js fonctionne réellement ).Si vous avez des typages et n'utilisez pas de
tsconfig.json
, utilisezreference
pour importer les typages:/// <reference path="path/to/typings/typings.d.ts" /> import * as _ from 'lodash`; console.log(_.toUpper('Hello, world !'))
Si vous utilisez un
tsconfig.json
fichier, assurez-vous que votre fichier de frappe est inclus (ou non exclu, selon votre choix), et procédezimport
comme dans l'exemple précédent.Dans le cas où il n'y a pas de typages disponibles. Vous avez deux choix: écrire le vôtre sur un
.d.ts
fichier ou ignorer la vérification de type pour la bibliothèque.Pour ignorer complètement la vérification de type (ce n'est pas la méthode recommandée), importez la bibliothèque sur une variable de type
any
.const _: any = require('lodash'); console.log(_.toUpper('Hello, world !'))
tsc
se plaindra quirequire
n'existe pas. Fournissez desnode
typages oudeclare
pour ignorer l'erreur.la source
ts-node
tant que l'index de typages est référencé danstsconfig.json
[2018/12] Nouvelle réponse à jour à cette question que j'ai posée en 2016, qui montre toujours beaucoup d'activité malgré des réponses obsolètes.
Pour faire court, TypeScript requiert des informations de type sur le code de votre paquet (aka " fichiers de déclaration de type " ou "typages") et vous indique à juste titre que vous perdriez sinon tout l'intérêt de TypeScript. Il existe plusieurs solutions pour les proposer ou les refuser, répertoriées ici par ordre de bonnes pratiques:
Solution 0 : le module fournit déjà les typages. Si son package.json contient une ligne comme celle-ci:
"typings": "dist/index.d.ts",
il est déjà compatible avec TypeScript. Ce n'est probablement pas le cas si vous lisez cette page, alors continuons ...
Solution 1 : utilisez les typages fournis par la communauté de DefinitelyTyped . Pour un module "foo", essayez ceci:
si ça marche, jackpot! Vous avez maintenant les typages et pouvez utiliser votre module. Si npm se plaint de ne pas trouver le module @ types / foo, continuons ...
Solution 2 : fournissez des typages personnalisés sur ce module. (avec une option pour ne faire aucun effort)
"include": [ "./typings-custom/**/*.ts" ]
declare module 'foo'
Votre code TypeScript devrait maintenant compiler, mais sans informations de type (TypeScript considère le module foo de type "any").
Vous pouvez également essayer d'écrire vous-même les informations de type, en consultant le document officiel et / ou des exemples de DefinitelyTyped . Si vous le faites, pensez à contribuer vos typages soit directement dans le module (solution 0, si l'auteur du module accepte), soit dans DefinitelyTyped (solution 1)
la source
Reference the content of this folder in your tsconfig.json:
donne l'erreur suivante:Unknown compiler option 'include'.
compilerOptions
Il vous manque probablement les fichiers de déclaration .
Voir DefinatelyTyped pour plus d'informations.
Essaye ça:
Vous pouvez maintenant importer.
import _ from 'lodash';
Si le module que vous importez a plusieurs exportations , vous pouvez le faire:
import { Express, Router } from 'express';
Si le module que vous importez "n'a pas d'export par défaut", vous devez procéder comme suit:
import * as http from 'http';
la source
* as _
et pas seulement_ from 'lodash'
comme dans le code ES6?import _ from 'lodash';
est meilleure dans ce cas. J'ai mis à jour ma réponse pour montrer différentes manières d'importer et pourquoi vous les utiliseriez.* as _
est nécessaire si le module n'a pas d'export par défaut. Le compilateur tsc vous en avertira.export default <...>
instruction. Jetez un œil à la section "Exportations par défaut" de la documentation des modules Typescript .Cela a fonctionné pour moi.
Dans le dossier typings, créez un nom de fichier nom -module.d.ts . Il contient:
declare module "module-name";
Dans tsconfig.json, reportez-vous au dossier
"typeRoots": [ "./typings", "../node_modules/@types" ]
la source
In tsconfig.json, refer to the folder
donne l'erreur suivante:Unknown compiler option 'typesRoots'.
J'ai eu cette erreur et aucune des réponses n'a fonctionné pour moi, mais je trouve quelque chose lorsque vous voulez travailler avec le module de nœud en tapé manuscrit, installez-les comme
$npm install @types/<module_name>
par exemple
au lieu de dire
la source