197 votes

Typescript eslint - Extension de fichier "ts" manquante import/extensions

J'ai une simple application Node/Express faite avec Typescript. Et eslint me donne l'erreur

Missing file extension "ts" for "./lib/env" import/extensions

Voici mon fichier .eslintrc

    {
  "extends": [
    "airbnb",
    "plugin:@typescript-eslint/recommended",
    "prettier",
    "prettier/react",
    "plugin:import/errors",
    "plugin:import/warnings",
    "plugin:import/typescript"
  ],
  "parser": "@typescript-eslint/parser",
  "plugins": ["@typescript-eslint", "prettier", "import"],
  "settings": {
    "import/extensions": [".js", ".jsx", ".ts", ".tsx"],
    "import/parsers": {
      "@typescript-eslint/parser": [".ts", ".tsx"]
    },
    "import/resolver": {
      "typescript": {
        "directory": "./tsconfig.json"
      },
      "node": {
        "extensions": [".js", ".jsx", ".ts", ".tsx"]
      }
    }
  },
  "rules": {
    "@typescript-eslint/indent": [2, 2],
    "no-console": "off",
    "import/no-unresolved": [2, { "commonjs": true, "amd": true }],
    "import/named": 2,
    "import/namespace": 2,
    "import/default": 2,
    "import/export": 2
  }
}

J'ai installé eslint-plugin-import et eslint-import-resolver-typescript. Et je n'arrive pas à comprendre pourquoi, j'ai eu cette erreur.

3 votes

361voto

superoryco Points 2012

Ajoutez le code suivant à rules :

"rules": {
   "import/extensions": [
      "error",
      "ignorePackages",
      {
        "js": "never",
        "jsx": "never",
        "ts": "never",
        "tsx": "never"
      }
   ]
}

airbnb ESLint config mène le problème.

32 votes

Ça a marché ! Merci. (autres lecteurs : assurez-vous de le mettre sous "règles" et non "paramètres"...)

0 votes

@Venryx Merci de me le rappeler gentiment. Je l'ai juste mis dans le mauvais bloc.

7 votes

Mais à quoi ça sert ?

177voto

Ryan Wheale Points 4685

Je sais que c'est tard, mais si vous étendez les règles d'Airbnb vous pouvez utiliser eslint-config-airbnb-typescript .

Désinstallez d'abord l'ancien et ajoutez le nouveau :

# uninstall whichever one you're using
npm uninstall eslint-config-airbnb
npm uninstall eslint-config-airbnb-base

# install the typescript one
npm install -D eslint-config-airbnb-typescript

Mettez ensuite à jour votre configuration ESlint, supprimez l'ancien Airbnb de la section "extends" et ajoutez le nouveau :

extends: ["airbnb-typescript"]

11voto

Il est important d'ajouter une extension d'importation et un analyseur syntaxique à .eslintrc

"settings": {
"import/extensions": [".js", ".jsx", ".ts", ".tsx"],
"import/parsers": {
  "@typescript-eslint/parser": [".ts", ".tsx"]
},
"import/resolver": {
  "node": {
    "extensions": [".js", ".jsx", ".ts", ".tsx"]
  }
}

} et ajouter aux règles :

 "import/extensions": [
  "error",
  "ignorePackages",
  {
    "js": "never",
    "jsx": "never",
    "ts": "never",
    "tsx": "never"
  }
]

enter code here

11voto

Hugo Elhaj-Lahsen Points 2141

Ajoutez ceci à rules dans votre configuration eslint :

"rules": {
  "import/extensions": "off"
}

Cela désactive la règle, puisque airbnb La configuration de l'utilisateur le permet.

13 votes

Désactiver quelque chose, c'est jamais la solution...

5 votes

@RichardZilahi pas cette fois-ci

5voto

nishi Points 411

J'ai réussi à le faire fonctionner en regroupant toutes les réponses que j'ai trouvées sur Internet :

c'est le résultat final pour moi :

{
  "settings": {
    "import/extensions": [".js", ".jsx", ".ts", ".tsx"],
    "import/parsers": {
      "@typescript-eslint/parser": [".ts", ".tsx"]
    },
    "import/resolver": {
      "node": {
        "extensions": [".js", ".jsx", ".ts", ".tsx"]
      }
    }
  },

  "env": {
    "browser": true,
    "es2021": true
  },

  "extends": ["plugin:react/recommended", "airbnb"],
  "parser": "@typescript-eslint/parser",
  "parserOptions": {
    "ecmaFeatures": {
      "jsx": true
    },
    "ecmaVersion": 12,
    "sourceType": "module"
  },
  "plugins": ["import", "react", "@typescript-eslint"],
  "rules": {
    "no-console": 1,
    "import/extensions": [
      "error",
      "ignorePackages",
      {
        "js": "never",
        "jsx": "never",
        "ts": "never",
        "tsx": "never",
        "mjs": "never"
      }
    ]
  }
}

J'utilise react native btw. Si vous utilisez quelque chose d'autre, il suffit d'enlever react devrait être suffisant.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X