"parserOptions.project" se ha configurado para @typescript-eslint/parser
Creé un nuevo proyecto React Native con--template typescript
Eliminé el template
directorio que venía como parte del texto estándar.
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 proporcionados.eslint
Diferentes reglas de pelusa para archivos JavaScript y TypeScript
El problema ocurre por una de las siguientes razones:
- Estás utilizando una regla que requiere información de tipo y no especifica un
parserOptions.project
; - Usted especificó
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 ejemplobabel.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 archivo
tsconfig.json
. 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
createDefaultProgram
no se especifica, solo debe lint los archivos que estén incluidos en los proyectos según lo definido en lostsconfig.json
archivos proporcionados. Si su configuración existente no incluye todos los archivos que desea eliminar, puede crear un archivotsconfig.eslint.json
.
Para resolverlo, actualice su configuración de ESLint para usar reglas de TypeScript solo en archivos 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 overrides
configuración en los documentos oficiales: ¿ Cómo funcionan las anulaciones?
No elimines un archivo específico
Si no desea eliminar el archivo mencionado en el error (por ejemplo babel.config.js
), puede ignorarlo agregando su nombre al .eslintignore
archivo :
babel.config.js
De todos modos, el paso anterior (sobre anular la configuración para 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 dependencias del desarrollador y ejecutarse en el node
entorno , en lugar de browser
.
Puede crear un archivo de configuración de TypeScript independiente ( tsconfig.eslint.json
) destinado a eslint
la configuración. Ese archivo extiende la clave tsconfig
de configuración y configuración include
para los archivos que deben ser linted.
.eslint.js
:
// ...
parserOptions: {
// ...
project: "./tsconfig.eslint.json",
// ...
},
// ...
tsconfig.eslint.json
:
{
"extends": "./tsconfig.json",
"include": [
// ...
"babel.config.js"
]
}
O si quieres ignorarlo, puedes ponerlo en .eslintignore
.
.eslintignore
:
// ...
babel.config.js
Agregue una línea en ".eslintignore":
.eslintrc.js
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",
],
}
Actualización 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 directorio de archivos en la
include
matriz de tsconfig.json.
Debe agregar ese archivo a su include
matriz tsconfig. Consulte typescript-eslint/typescript-eslint#967 para obtener más detalles.