En un proyecto mecanografiado de crear-reaccionar-aplicación, traté de escribir esto solo para probar algunas cosas rápidamente:
// experiment.test.ts it('experiment', () => { console.log('test'); }); Pero me da el siguiente error, con it garabato rojo debajo:
Todos los archivos deben ser módulos cuando se proporciona el indicador '--isolatedModules'.
Sin embargo, si cambio el archivo a lo siguiente, aparentemente todo está bien (excepto por la importación no utilizada, por supuesto):
// experiment.test.ts import { Component} from 'react'; // literally anything, don't even have to use it it('test', () => { console.log('test'); }); ¿Por qué? ¿Que está sucediendo aquí? ¿Qué significa/hace realmente --isolatedModules ?
La forma correcta es decirle a TypeScript lo que quiere. Si no desea módulos isolatedModules , cree tsconfig.json dentro de su directorio de test y agregue:
{ "extends": "../tsconfig.json", "compilerOptions": { "isolatedModules": false }, } Agregar "isolatedModules": true a la configuración y luego engañar al verificador de TypeScript al agregar export {} me huele mal a código.
Intentemos verificar módulos aislados. Cuando revisé Google, no hay un contexto directo de eso.
Básicamente significa que permite que Typescript compile módulos de forma aislada.
Pero proviene de Typescript y tiene algo que ver con Typescript que prefiere módulos sobre espacios de nombres.
Los módulos también dependen de un cargador de módulos (como CommonJs/Require.js) o un tiempo de ejecución que admite módulos ES. Los módulos brindan una mejor reutilización del código, un aislamiento más fuerte y un mejor soporte de herramientas para la agrupación.
Al usar un proyecto typescript create-react-app, debe haber instalado typescript y ts-jest (o la aplicación create-react- debe manejar las dependencias en función de si expulsó la aplicación o no).
También ts-jest tiene información al respecto:
De manera predeterminada, ts-jest usa el compilador TypeScript en el contexto de un proyecto (el suyo), con funciones y verificación de tipo completas. Pero también se puede usar para compilar cada archivo por separado , lo que TypeScript llama un 'módulo aislado'. Eso es lo que hace la opción isolatedModules (que por defecto es falso).
Tan pronto como use el comando de export , estará creando un módulo a partir de lo que se está exportando.
Si está utilizando ts-jest, puede agregar esta configuración sin afectar sus otros módulos, en los que consistirá la aplicación create-react.
"ts-jest": { "isolatedModules": false }Y echa un vistazo a la página de ts-jest (segunda fuente) para conocer los pros y los contras.
¿Sigues teniendo errores a pesar de exportar cosas de ese "archivo de errores"?
Check if you don't export same name that you already export in another file (conflicto)After your fix try to stop and start your npm/yarn runner (experimenté que no puede recuperarse incluso después de recargar la página, especialmente cuando tiene otro error en otro lugar)¿Qué tal si simplemente haces .eslintignore y agregas la carpeta de archivos donde necesitas ignorar de eslint para que no haya errores en ese error de --isolatedModules corregido por cualquier importación y puedes probar tus lógicas?
Resolución de problemas, consulte el artículo https://blog.csdn.net/qingfeng812/article/details/120510673
{ "compilerOptions": { "target": "es5", "lib": [ "dom", "dom.iterable", "esnext" ], "allowJs": true, "skipLibCheck": true, "esModuleInterop": true, "allowSyntheticDefaultImports": true, "strict": true, "forceConsistentCasingInFileNames": true, "noFallthroughCasesInSwitch": true, "module": "esnext", "moduleResolution": "node", "resolveJsonModule": true, "isolatedModules": false, "noEmit": true, "jsx": "react-jsx" }, "include": [ "src" ] }Esto se debe a que aún no ha importado la función que desea probar. Una vez que hagas eso, el error desaparecerá. La respuesta aceptada explica por qué.
Typescript trata los archivos sin importar/exportar como archivos de script heredados. Como tales archivos no son módulos y cualquier definición que tengan se fusiona en el espacio de nombres global. isolatedModules prohíbe tales archivos.
Agregar cualquier importación o exportación a un archivo lo convierte en un módulo y el error desaparece.
Además, export {} es una forma práctica de convertir un archivo en un módulo sin importar nada.