L’erreur «Module ‘name» se résout en un module non typé à… »lors de l’écriture du fichier de définition TypeScript personnalisé.

Je ne trouve pas la définition TypeScript @type/{name} de l’un des packages NodeJS installés. Je tente donc d’écrire un fichier d.ts pour celui-ci et de le placer dans le dossier {project root}\typings . Voici comment je fais:

 // My source code: index.ts import Helper from 'node-helper-lib'; // My definition: \typings\node-helper-lib.d.ts declare....(something else) declare module 'node-helper-lib' { class Helper { ... } export = Helper; } 

Cependant, Visual Studio Code continue à générer cette erreur et place une ligne rouge sous le declare module 'node-helper-lib' :

[ts] Nom de module non valide en augmentation. Le module ‘node-helper-lib’ se résout en un module non typé dans ‘{chemin du projet} \ noeud_modules \ noeud-helper-lib \ index.js’, qui ne peut pas être augmenté.

N’est-il pas légitime que, parce que la bibliothèque n’est pas typée, je devrais être autorisé à y append du texte?

METTRE À JOUR:

J’utilise:

  • TypeScript: 2.1.4
  • Code Visual Studio: 1.9.1
  • Nœud JS: 6.9.4
  • Windows 10 x64

La solution actuelle est donnée dans un commentaire de @Paleo dans la réponse de @ hirikarate:

Les importations doivent être déclarées dans la déclaration du module.

Exemple:

 declare module 'node-helper-lib' { import * as SomeThirdParty from 'node-helper-lib'; interface Helper { new(opt: SomeThirdParty.Options): SomeThirdParty.Type } export = Helper; } 

Après quelques tentatives et erreurs, j’ai trouvé que l’ augmentation signifie “déclarer un module dans le même fichier avec une autre déclaration de module”.

Par conséquent, si nous voulons écrire le fichier de définition pour une bibliothèque JavaScript tierce non typée , il ne faut qu’UN SEUL declare module 'lib-name' dans ce fichier, et ‘nom-lib’ doit correspondre exactement au nom de la bibliothèque (se trouve dans son package.json, propriété “name”).

D’autre part, si une bibliothèque tierce contient déjà le fichier de définition .d.ts et que nous souhaitons étendre ses fonctionnalités, nous pouvons placer la définition supplémentaire dans un autre fichier que nous créons. Ceci s’appelle augmenting .

Par exemple:

 // These module declarations are in same file, given that each of them already has their own definition file. declare module 'events' { // Extended functionality } declare module 'queryssortingng' { // Extended functionality } declare module '...' { ... } 

Je laisse ma découverte ici au cas où quelqu’un aurait la même question. Et corrigez-moi s’il me manque quelque chose.