Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

242
Views
¿Puedo deshabilitar la inferencia de TypeScript para los módulos JS importados? (O configúrelo para inferir siempre el tipo: cualquiera)

Estoy tratando de usar un módulo JS en un archivo TypeScript. Pero, debido a que el módulo JS no tiene ninguna declaración de tipo, no puedo usar el módulo JS debido a errores de TypeScript.

El problema ocurre debido a un argumento predeterminado en la función importada de JS que TypeScript infiere como de un tipo cuando no lo es.

Sé que el problema probablemente solo existe debido al uso estúpido del argumento predeterminado y de una función mal escrita. Pero no puedo editar el módulo JS para corregirlo.

El verdadero problema es con un Componente React que tiene un accesorio que por defecto es false ( const El = ({prop1, prop2 = false})=>{...} ) pero también podría recibir un number . Luego, al llamar al componente en el archivo TS y al establecer ese accesorio en un número ( <El prop1={1} prop2={3}/> ), TypeScript se queja con "Argument of type 'number' is not assignable to parameter of type 'boolean | undefined'."

Para simplificar, aquí hay un ejemplo equivalente que no es de React:

Entonces, imaginemos que uno tiene un proyecto TypeScript con "allowJS": true establecido para que se pueda importar un módulo JS.

 //externalModule.js //Can't edit this file export const addOneOrMore = (a, b = false) => { if(b == false) return a + 1 else return a + b }
 //typescriptFile.ts import addOneOrMore from "./externalModule.js" let one: number = 1 let three: number = 3 console.log(addOneOrMore(one,three)) // TS Error: "Argument of type 'number' is not assignable to parameter of type 'boolean | undefined'."

Sé que lo que sucede es que el compilador de TS infiere que, debido a que el argumento predeterminado es false , es del tipo booleano. . Y por eso, no puedo pasarle un número.

Creo que en este caso no tiene mucho sentido inferir eso (al menos para módulos JS importados sin declaraciones de tipo)

Entonces, mis preguntas son:

  • ¿Puedo configurar TSConfig o TypeScript de alguna manera para que anule el JS infiriendo siempre con : any ?
  • ¿Tiene sentido inferir boolean | undefined es ese caso? ¿Por qué undefined ? ¿Por qué es más probable que alguien pase activamente undefined específicamente a un argumento predeterminado que a cualquier otro tipo? ¿Por qué no boolean | null o algo mas?
  • ¿Hay alguna otra forma que me permita usar ese módulo en un archivo TS?

¡Muchas gracias!

about 4 years ago · Juan Pablo Isaza
2 answers
Answer question

0

El módulo JS no tiene declaraciones de tipo. […] Pero no puedo editar el módulo JS para corregirlo. […] ¿Hay alguna otra forma que me permita usar ese módulo en un archivo TS?

Sí, lo hay: ¡puede usar un archivo de declaración ! Simplemente cree el archivo externalModule.d.ts , coloque las declaraciones de tipo adecuadas en él y podrá usar la biblioteca tal como está.

about 4 years ago · Juan Pablo Isaza Report

0

En TypeScript 3.7, la verificación de tipos se desactivará en un archivo si comienza con el siguiente comentario:

 // @ts-nocheck

Como ya se mencionó, en versiones anteriores puede deshabilitar la verificación en una sola línea al incluir el siguiente comentario en la línea anterior:

 // @ts-ignore

En tu caso, puedes probar esto:

 //typescriptFile.ts import addOneOrMore from "./externalModule.js" let one: number = 1 let three: number = 3 // @ts-ignore console.log(addOneOrMore(one,three))
about 4 years ago · Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!