"parserOptions.project" se ha configurado para @typescript-eslint/parser

Resuelto Dan asked hace 5 años • 0 respuestas

Creé un nuevo proyecto React Native con--template typescript

Eliminé el templatedirectorio 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

Dan avatar Oct 23 '19 01:10 Dan
Aceptado

Diferentes reglas de pelusa para archivos JavaScript y TypeScript

El problema ocurre por una de las siguientes razones:

  1. Estás utilizando una regla que requiere información de tipo y no especifica un parserOptions.project;
  2. 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 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 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 createDefaultProgramno se especifica, solo debe lint los archivos que estén incluidos en los proyectos según lo definido en los tsconfig.jsonarchivos proporcionados. Si su configuración existente no incluye todos los archivos que desea eliminar, puede crear un archivo tsconfig.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 overridesconfiguració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 .eslintignorearchivo :

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.

Rafael Tavares avatar Oct 22 '2020 18:10 Rafael Tavares

Puede crear un archivo de configuración de TypeScript independiente ( tsconfig.eslint.json) destinado a eslintla configuración. Ese archivo extiende la clave tsconfigde configuración y configuración includepara 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
Željko Šević avatar Mar 24 '2020 22:03 Željko Šević

Agregue una línea en ".eslintignore":

.eslintrc.js

magentaqin avatar Feb 18 '2021 13:02 magentaqin

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 includematriz de tsconfig.json.

codejockie avatar Jun 28 '2020 01:06 codejockie

Debe agregar ese archivo a su includematriz tsconfig. Consulte typescript-eslint/typescript-eslint#967 para obtener más detalles.

erikdstock avatar Oct 25 '2019 13:10 erikdstock