node.js - Declarar un archivo .d.ts de una dependencia de JS que exporta una función
Estoy usando una dependencia (https://www.npmjs.com/package/is-class) en mi proyecto de TypeScript. Esta dependencia no tiene una definición @types, así que, hasta ahora, he estado trabajando con un archivo .d.ts personalizado con declare module 'is-class'; para que la importación funcione. Sin embargo, quiero agregar tipos a esta dependencia.
is-class básicamente exporta una sola función que recibe 1 parámetro y devuelve un booleano. He estado intentando agregar esto a mi archivo .d.ts, pero todo lo que he intentado hasta ahora lanza un error u otro, mi mejor conjetura hasta ahora es:
declare module 'is-class' {
function isClass(a: any): boolean;
export = isClass;
}
En mi código ts:
import * as isClass from 'is-class';
// ...
const foo = isClass(bar);
Esto lanza el mensaje: Este módulo solo se puede referenciar con importaciones/exportaciones de ECMAScript activando la bandera 'esModuleInterop' y haciendo referencia a su exportación predeterminada., pero no estoy seguro de cuál es la mejor manera de hacer esto.
Respuesta #1
Acabo de encontrar un problema similar.
Primero actualicé tsconfig.json para incluir un par de nuevas opciones:
{
"compilerOptions": {
"allowSyntheticDefaultImports": true,
"esModuleInterop": true,
}
}
(Este no es todo el archivo de configuración. Solo excluí las opciones que ya estaban presentes anteriormente.)
Cambié la línea de importación a algo así:
import isClass from 'is-class';
Y el archivo de declaración se ve básicamente como lo describiste:
declare module 'is-class' {
function isClass(a: any): boolean;
export = isClass;
}
