Búsqueda de sitios web

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