Así que estoy tratando de usar la biblioteca pino-clf en mi proyecto koa TS.
Sigo recibiendo esto cuando intento compilar:
TSError: ⨯ Unable to compile TypeScript: src/modules/logger/index.ts:5:21 - error TS7016: Could not find a declaration file for module 'pino-clf'. '/dev/webservices/node_modules/pino-clf/index.js' implicitly has an 'any' type. Try `npm i --save-dev @types/pino-clf` if it exists or add a new declaration (.d.ts) file containing `declare module 'pino-clf';` 5 import pinoClf from 'pino-clf' ~~~~~~~~~~pino-clf no tiene un archivo de definición y no hay @types/pino-clf disponible.
Intenté agregar un archivo pino-clf.d.ts en la carpeta del archivo en el que estoy importando la biblioteca con el módulo de declaración 'pino-clf' en él. Si bien eso hizo que los garabatos rojos en mi IDE desaparecieran, TS todavía se niega a compilar.
¿Cómo en el mundo usamos una lib que es simplemente JS con TS y sin agregar un ts-ignore?
Entonces, hay dos formas en que esto se puede lograr.
Solución uno: probablemente la más fácil
Simplemente puede usar require ex: const pinoClf = require("pinoClf") - la desventaja es que la referencia de punto o intellisense no está disponible, pero si conoce los métodos que desea usar, no es gran cosa.
Solución dos:
Cree su propio archivo typeDef en la raíz de su proyecto. Por ejemplo,
pino-clf.custom.d.ts
declare module "pino-clf.custom" { const pinoClfJs = require("pinoClf"); export default class pinoClf { commonLog (type: string, dest: NodeJS.WriteStream, ancillary: any): void { pinoClfJs.commonLog(type, dest, ancillary); } } } luego, en su archivo tsconfig.json , incluya el nuevo archivo typeDef:
{ ... // assuming src is already there "include": [ "src", "pino-clf.custom.d.ts" ] } después de eso, simplemente puede importarlo import pinoClf from "pino-clf.custom";
Esta es una implementación muy básica y recomendamos investigar si desea algo más complejo. Por supuesto, hay más de una forma de resolver un problema, pero espero que esto haya ayudado. Salud.