Estoy tratando de codificar en TypeScript un paquete NPM que debería funcionar como una herramienta CLI.
Para simplificar, digamos que el paquete tomará la exportación predeterminada de un archivo config.js escrito por el desarrollador que usa el paquete y lo imprimirá en la consola.
Entonces el desarrollador:
config.js con export default 'hello world'npx someLibrary y vea "hola mundo" en la terminal. Este caso de uso es común en herramientas que he usado como babel, jest y webpack. Aunque ya he superado algunos desafíos técnicos en torno a eso, estoy atascado en cómo obtener el futuro archivo config.js en Typescript.
El enfoque que estoy tratando de seguir es usar importaciones dinámicas. El compilador no lo permitirá, ya que el archivo de configuración no existe en el momento de la codificación. El código es algo como esto:
main(); async function main(): Promise<void> { const config = await import("./config.js"); console.log(config); } Esto provoca el error del compilador: Cannot find module './config.js' or its corresponding type declarations.ts(2307) .
Mi pregunta es: ¿cómo puedo decirle a TypeScript que importe el archivo de configuración que se creará en el futuro y estará disponible solo durante el tiempo de ejecución?
Si eso es imposible, ¿cómo puedo consumir el contenido de ese archivo de configuración dentro del programa Typescript?
Mi pregunta es: ¿cómo puedo decirle a TypeScript que importe el archivo de configuración que se creará en el futuro y estará disponible solo durante el tiempo de ejecución?
una. Para una solución rápida, simplemente puede poner @ts-ignore en la línea arriba de su importación. Esto debería ignorar el error de compilación y, en tiempo de ejecución, el archivo debería importarse en consecuencia.
b. Alternativamente, también puede usar require('./config.js') en lugar de usar import. Esto también debería eliminar el error de compilación.
C. Para una solución más adecuada, puede considerar usar una función para leer el archivo en tiempo de ejecución. Dos cosas que puede considerar usar son fetch y fs
buscar
fetch('./config.js') .then(response => response.text()) .then(text => console.log(text))fs
import fs from 'fs' const data = fs.readFileSync('./config.js', 'utf8') console.log(data)