No puedo encontrar la definición de TypeScript @type/{name}
para uno de mis paquetes NodeJS instalados, así que intento escribir un d.ts
archivo para él y poner el archivo en la {project root}\typings
carpeta. Así es como lo hago:
// 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;
}
Sin embargo, Visual Studio Code sigue produciendo este error y pone una línea roja debajo declare module 'node-helper-lib'
:
[ts] Nombre de módulo no válido en aumento. El módulo 'node-helper-lib' se resuelve en un módulo sin tipo en '{ruta del proyecto} \ node_modules \ node-helper-lib \ index.js', que no se puede aumentar.
¿No es legítimo que debido a que la biblioteca no está mecanografiada, se me debería permitir agregar escritura?
ACTUALIZAR:
Estoy usando:
- TypeScript: 2.1.4
- Código de Visual Studio: 1.9.1
- Nodo JS: 6.9.4
- Windows 10 x64
fuente
Después de algunos intentos y errores, descubrí que eso
augmentation
significa "declarar un módulo en el mismo archivo con otra declaración de módulo".Por lo tanto, si queremos escribir un archivo de definición de un tipo asignado biblioteca de JavaScript 3 ª parte, hay que tener sólo una
declare module 'lib-name'
en ese archivo, y 'lib-nombre' debe coincidir exactamente con el nombre de la biblioteca (se puede encontrar en su package.json " nombre "propiedad).Por otro lado, si una biblioteca de terceros ya tiene un archivo de definición
.d.ts
incluido y queremos ampliar sus funcionalidades, entonces podemos poner la definición adicional en otro archivo que creamos. A esto se le llamaaugmenting
.Por ejemplo:
// 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 '...' { ... }
Dejo mi descubrimiento aquí por si alguien tiene la misma pregunta. Y corrígeme si me perdí algo.
fuente
supertest
la queja de TypeScript ni siquiera tiene sentido, ¿cómo no puedo aumentar algo que ni siquiera tiene una declaración? Pensé que había escrito archivos de definición personalizados como este muchas veces ...[ts] Invalid module name in augmentation. Module 'supertest' resolves to an untyped module at '/home/chase/Desktop/projects/formuoli/node_modules/supertest/index.js', which cannot be augmented.
- desafortunadamente@types/supertest
se rompe al incluir bibliotecas DOM que lo hacen roto ... parece que no tengo suerte.d.ts
, tal vez debería mover toda la importación al módulo de declaración "moduleName" {}.import
llamadas deben entrar dentro deldeclare module 'module' {}
alcance. el error es engañoso en el mejor de los casosimport
declaraciones requeridas por su módulo fuera del endeclare module
lugar de dentro. Un comportamiento extraño tan poco intuitivo (lo siento por despotricar aquí).También recibía ese mensaje de error. El problema para mí fue que estaba tratando de declarar otro módulo en un archivo de definición de tipo existente que tenía una declaración de módulo. Después de mover la declaración del nuevo módulo a un nuevo archivo, el error desapareció.
fuente
En mi caso, solo usé la siguiente declaración en uno de mis archivos de tipos, por lo que pude usar todos los paquetes no mecanografiados:
declare module '*'
fuente