130 votes

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 peux pas trouver Tapuscrit définition @type/{name} , pour une de mes installé NodeJS paquets, donc je tente d'écrire un d.ts le fichier et placez le fichier dans {project root}\typings le dossier. Voilà 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;
}

Toutefois, le Code de Visual Studio maintient le rendement de cette erreur et met la ligne rouge en vertu de l' declare module 'node-helper-lib':

[ts] Invalide nom du module en augmentation. Module "nœud-helper-lib' décide d'un non module '{projet path}\node_modules\node-helper-lib\index.js " qui ne peut pas être augmentée.

N'est-il pas légitime que parce que la bibliothèque est non typé, donc je devrais être autorisé à ajouter à taper pour elle?

Mise à JOUR:

Je suis à l'aide de:

  • Tapuscrit: 2.1.4
  • Le Code De Visual Studio: 1.9.1
  • Node JS: 6.9.4
  • Windows 10 x64

226voto

Lee Points 462

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;
}
 

108voto

hirikarate Points 955

Après quelques essais et erreurs, j'ai trouvé qu' augmentation signifie "déclarer un module dans le même fichier avec d'autres déclaration de module(s)".

Par conséquent, si nous voulons écrire le fichier de définition pour un non typée de la 3e partie de la bibliothèque JavaScript, nous devons avoir UN SEUL declare module 'lib-name' dans ce fichier, et "lib-name' doit correspondre exactement au nom de la bibliothèque (peut être trouvé dans son paquet.json, propriété "name").

D'autre part, si un 3ème partie de la bibliothèque a déjà le fichier de définition de .d.ts inclus, et nous voulons étendre ses fonctionnalités, alors nous pouvons mettre la définition supplémentaire dans un autre fichier que nous allons créer. Cela 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 'querystring' {
   // Extended functionality        
}

declare module '...' { ... }

Je laisse ma découverte ici au cas où quelqu'un a la même question. Et s'il vous plaît corrigez-moi si j'ai raté quelque chose.

6voto

G-Wiz Points 4800

Je recevais aussi ce message d'erreur. Le problème pour moi était que j'essayais de déclarer un autre module dans un fichier de définition de type existant contenant une déclaration de module. Après avoir déplacé la nouvelle déclaration de module dans un nouveau fichier, l'erreur a disparu.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X