Creé un nuevo proyecto React Native con --template typescript
Eliminé el directorio de template que venía como parte del modelo.
Luego procedí a agregar ESLint:
module.exports = { parser: "@typescript-eslint/parser", plugins: ["@typescript-eslint"], extends: ["airbnb-typescript-prettier"] }; Sin embargo, cuando abro babel.config.js , aparece este error
Error de análisis: "parserOptions.project" se ha configurado para @typescript-eslint/parser.
El archivo no coincide con la configuración de su proyecto:
/Users/Dan/site/babel.config.js.El archivo debe estar incluido en al menos uno de los proyectos provistos.eslint
Debe agregar ese archivo a su matriz de include tsconfig. Consulte typescript-eslint/typescript-eslint#967 para obtener más detalles.
El problema ocurre por una de las siguientes razones:
parserOptions.project ;parserOptions.project , no especificó createDefaultProgram ( se eliminará en una versión futura ) y está eliminando archivos que no están incluidos en el proyecto (por ejemplo, babel.config.js , metro.config.js )A partir de los documentos de TypeScript ESLint Parser :
parserOptions.proyecto
Esta opción le permite proporcionar una ruta al
tsconfig.jsonde su proyecto. Esta configuración es necesaria si desea utilizar reglas que requieran información de tipo.(...)
Tenga en cuenta que si se especifica esta configuración y
createDefaultProgramno, solo debe litear los archivos que se incluyen en los proyectos según lo definido por los archivostsconfig.jsonproporcionados. Si su configuración existente no incluye todos los archivos que le gustaría eliminar, puede crear untsconfig.eslint.jsonseparado.
Para resolverlo, actualice su configuración de ESLint para usar reglas de TypeScript solo en archivos de TypeScript:
{ // ... parser: '@typescript-eslint/parser', plugins: ["@typescript-eslint"], overrides: [ { files: ['*.ts', '*.tsx'], // Your TypeScript files extension // As mentioned in the comments, you should extend TypeScript plugins here, // instead of extending them outside the `overrides`. // If you don't want to extend any rules, you don't need an `extends` attribute. extends: [ 'plugin:@typescript-eslint/recommended', 'plugin:@typescript-eslint/recommended-requiring-type-checking', ], parserOptions: { project: ['./tsconfig.json'], // Specify it only for TypeScript files }, }, ], // ... } Puede leer más sobre la configuración de overrides en los documentos oficiales: ¿Cómo funcionan las anulaciones?
Si no desea borrar el archivo que se menciona en el error (por ejemplo, babel.config.js ), puede ignorarlo agregando su nombre al archivo .eslintignore :
babel.config.jsDe todos modos, el paso anterior (sobre la anulación de la configuración de los archivos TypeScript) es importante en caso de que su proyecto contenga archivos JavaScript y TypeScript que desee eliminar.
También puede crear otras anulaciones para diferentes situaciones, por ejemplo, una configuración diferente para los archivos de prueba, ya que puede usar las dependencias del desarrollador y ejecutarse en el entorno del node , en lugar del browser .
Tuve este problema en VsCode cuando estaba abriendo mi proyecto demasiado alto en la estructura de carpetas. Una solución extraña pero funcionó.
En mi ejemplo, el proyecto de funciones de Firestore para express en .ts, tuve que abrirlo desde la carpeta de funciones que creó.
Debería haber notado que era este tipo de problema ya que 'npm run-script lint' nunca devolvió un error.
Agregue una línea en ".eslintignore":
.eslintrc.js
Puede crear un archivo de configuración de TypeScript independiente ( tsconfig.eslint.json ) destinado a la configuración de eslint . Ese archivo amplía la configuración de tsconfig y las configuraciones include la clave para los archivos que se deben eliminar.
.eslint.js :
// ... parserOptions: { // ... project: "./tsconfig.eslint.json", // ... }, // ... tsconfig.eslint.json :
{ "extends": "./tsconfig.json", "include": [ // ... "babel.config.js" ] } O si quiere ignorarlo, puede ponerlo en .eslintignore .
.eslintignore :
// ... babel.config.jsUtilizo un enlace simbólico desde la carpeta de mi proyecto que apunta a mi carpeta de inicio:
/opt/project/workspace => ~/worspace
Al abrir el VSCode usando la ruta del enlace simbólico ~/workspace el error siempre persiste.
Abrir VSCode usando la ruta original: /opt/project/workspace resuelve el problema.
Esto no debería ser un problema, pero por ahora lo es.
En mi configuración de ESLint tengo la siguiente configuración:
.eslintrc.js
module.exports = { root: true, env: { node: true, }, globals: { Promise: "readonly" }, parser: "@typescript-eslint/parser", parserOptions: { sourceType: "module", tsconfigRootDir: __dirname, project: ["./tsconfig.eslint.json"], }, plugins: ["@typescript-eslint"], extends: [ "eslint:recommended", "prettier/@typescript-eslint", "plugin:@typescript-eslint/recommended", "plugin:@typescript-eslint/recommended-requiring-type-checking", ], }Actualizar La parte clave de la solución es esta:
parser: "@typescript-eslint/parser"y esto:
parserOptions: { sourceType: "module", tsconfigRootDir: __dirname, project: ["./tsconfig.eslint.json"], // could be tsconfig.json too }No olvide incluir ese archivo o el directorio del archivo en la matriz de
includede tsconfig.json.
En nuestro caso, tenemos múltiples .eslintrc y múltiples tsconfig.json en nuestro árbol de directorios. (Uno para el servidor en . y otro para el cliente React en ./client ).
Esto funcionó bien con la CLI, pero no con el complemento de VS Code.
La solución fue establecer el valor del project ./client/.eslintrc para que fuera relativo a la raíz , no al archivo .eslintrc. Después de cambiarlo de "./tsconfig.json" a "./client/tsconfig.json", el IDE funciona como se esperaba.
Ejecute npm i -D @types/node
Incluir compatibilidad con texto mecanografiado para archivos *.config.js :
tsconfig.json :
{ "include": [ "**/*.config.js" // for *.config.js files ] }¡Y luego recarga tu IDE!
Para mí, el problema se origina en algunos archivos ignorados en tsconfig usando la propiedad de exclude , pero eslint no los ignora.
Por lo general, si uno quiere que TSC ignore los archivos, entonces se aplicará lo mismo a eslint. así que simplemente copie y pegue el valor de exclude en la configuración de .tsconfig en la propiedad ignorePatterns en la configuración de .eslintrc .
Estaba teniendo el mismo problema al agregar '@typescript-eslint/prefer-nullish-coalescing': 'error' a .eslintrc.js .
Después de mucho ensayo y error, se me ocurrió esta solución, que funciona bien en mi caso:
module.exports = { ... overrides: [ { files: ['*.ts', '*.tsx'], parserOptions: { // this setting is required to use rules that require type information project: './tsconfig.json', }, rules: { '@typescript-eslint/prefer-nullish-coalescing': 'error', }, }, ], }Simplemente indique a eslint que los ignore agregando la opción ignorePatterns a su .eslintrc.js :
module.exports = { root: true, parser: '@typescript-eslint/parser', parserOptions: { project: './tsconfig.json', }, ignorePatterns: ["babel.config.js"], ...Como no tiene mucho valor limpiar los archivos de configuración de su proyecto, puede ignorarlos con seguridad.
Además, no los haría parte de su tsconfig.json ni crearía un archivo especial tsconfig.eslint.json , solo para fines de pelusa.
¿Este error proviene de la extensión VSCode? ¿El error tiene una ruta relativa que va al nivel superior aunque esté en la misma carpeta (o subcarpeta) (como se muestra en el mensaje de error a continuación)?
Parsing error: "parserOptions.project" has been set for @typescript-eslint/parser. The file does not match your project config: ../../../../../home/<ommitted>/projects/floor-planner/app/src/App.vue. The file must be included in at least one of the projects provided.Si es así, compruebe si también persiste al utilizar la CLI.
Desde la raíz de su proyecto, puede ejecutar eslint . . Si no se encuentran esos errores, es muy probable que haya abierto el proyecto a través de un enlace simbólico .
A partir de agosto de 2021, la extensión Eslint no funciona con Symlinks.
Desde el directorio de su proyecto, ejecute pwd -P para obtener la ruta absoluta.
En mi caso, esto da como resultado
~/projects/floor-planner/app: pwd -P /media/projects/2021-Q3/floor-planner/appAbra el proyecto a través de este camino.
Eslint ya no debería mostrar el error.
Establezca parserOptions en .eslintrc como se muestra a continuación
"parserOptions": { "ecmaFeatures": { "jsx": true }, "ecmaVersion": 2019, "sourceType": "module" },Pasé mucho tiempo en un problema como este.
Había creado un jest.config.ts en lugar de jest.config.js , por lo que arrojaba este error exacto de eslint🤦
Me encontré con este problema hoy, y ninguna de las soluciones anteriores ayudó. El problema que tuve fue que tenía dos archivos en el mismo directorio que compartían el mismo nombre de archivo (sin extensión). Por ejemplo, src/foo.ts y src/Foo.tsx . Cambiar el nombre de uno de los archivos solucionó el error de linter. Consulte @typescript-eslint/parser#955 .
Solo necesitaba agregar la ruta al nuevo tsconfig.json en la matriz del project y el script eslint y el problema desapareció.
tsconfig.json :
project: ["./newfolder/tsconfig.json"] package.json :
"eslint": "eslint -c ./.eslintrc.js './newfolder/**/*.ts'"Simplemente agregue el siguiente código dentro del archivo .eslintrc.js.
ignorePatterns: ['.eslintrc.js']Mi problema en PHPStorm es que tenía configurado el director de trabajo:
Aclaré eso y todo funcionó :\
El error significa que hay un archivo que se puede compilar pero que no pertenece a la estructura del proyecto definida actualmente. hay varias soluciones:
.eslintignoreo
.eslintrc.js ignorePatterns: ["babel.config.js"] // or ignorePatterns: ["**/*.config.js"] agregue el archivo, la carpeta o el patrón al archivo tsconfig.json
include": [ "src", "other_src", ]NOTA: algunos cambios necesitan reiniciar el IDE para que surtan efecto