ESLint : TypeScript
ESLint ne comprend pas TypeScript seul : le projet typescript-eslint fournit l’analyseur et des règles dédiées.
Installer
Section intitulée « Installer »npm install -D eslint @eslint/js typescript typescript-eslintConfiguration de base
Section intitulée « Configuration de base »eslint.config.js :
import js from '@eslint/js';import tseslint from 'typescript-eslint';
export default tseslint.config( { ignores: ['dist/', 'coverage/'] }, js.configs.recommended, ...tseslint.configs.recommended, { files: ['**/*.{ts,tsx}'], rules: { '@typescript-eslint/no-unused-vars': [ 'error', { argsIgnorePattern: '^_' }, ], '@typescript-eslint/consistent-type-imports': 'error', }, },);tseslint.config(...) assemble les blocs et vérifie leur forme ; avec les versions récentes d’ESLint, defineConfig (de eslint/config) joue le même rôle. Le paquet typescript-eslint regroupe l’analyseur et le plugin.
Jeux de règles
Section intitulée « Jeux de règles »| Jeu | Contenu |
|---|---|
recommended |
Erreurs probables, sans informations de types (point de départ) |
strict |
Règles supplémentaires plus exigeantes |
stylistic |
Cohérence de style (types, interfaces) |
recommendedTypeChecked, strictTypeChecked, stylisticTypeChecked |
Variantes avec informations de types (plus puissantes, plus lentes) |
Règles avec informations de types
Section intitulée « Règles avec informations de types »Certaines règles utilisent le vérificateur de types de TypeScript pour détecter des erreurs que l’analyse seule ne voit pas :
| Règle | Détecte |
|---|---|
no-floating-promises |
Promesse non attendue ni capturée |
no-misused-promises |
Promesse passée là où on attend une valeur (condition, rappel) |
await-thenable |
await sur une valeur qui n’est pas une promesse |
no-unsafe-assignment, no-unsafe-member-access, no-unsafe-call |
Usage de valeurs de type any |
restrict-template-expressions |
Valeur inattendue dans un gabarit de chaîne |
no-unnecessary-condition |
Condition toujours vraie ou fausse d’après les types |
Activation :
import js from '@eslint/js';import tseslint from 'typescript-eslint';
export default tseslint.config( { ignores: ['dist/', 'coverage/'] }, js.configs.recommended, ...tseslint.configs.recommendedTypeChecked, { languageOptions: { parserOptions: { projectService: true, // utilise tsconfig.json automatiquement tsconfigRootDir: import.meta.dirname, }, }, }, { // fichiers hors tsconfig (configuration, scripts) : sans informations de types files: ['**/*.js', '**/*.mjs', 'eslint.config.js'], ...tseslint.configs.disableTypeChecked, },);projectService: true lit le tsconfig.json du projet (option des versions récentes ; l’ancienne option est project: ['./tsconfig.json']). Les fichiers qui ne font pas partie du tsconfig.json provoquent l’erreur « not found by the project service » : les exclure du bloc, ou les ajouter à include.
Le coût : l’analyse avec types est plus lente (elle charge tout le programme TypeScript). Réserver ces règles aux fichiers de src/ et utiliser --cache.
Règles fréquentes à régler
Section intitulée « Règles fréquentes à régler »rules: { '@typescript-eslint/no-explicit-any': 'warn', '@typescript-eslint/no-non-null-assertion': 'warn', '@typescript-eslint/consistent-type-imports': ['error', { prefer: 'type-imports' }], '@typescript-eslint/no-unused-vars': ['error', { argsIgnorePattern: '^_' }], '@typescript-eslint/explicit-function-return-type': 'off', '@typescript-eslint/no-floating-promises': 'error',}Désactiver la règle ESLint de base quand la version TypeScript existe : no-unused-vars → @typescript-eslint/no-unused-vars (les jeux recommended s’en chargent).
ESLint et le compilateur
Section intitulée « ESLint et le compilateur »tsc |
ESLint | |
|---|---|---|
| Vérifie les types | Oui | Non (utilise les types pour certaines règles) |
| Détecte les mauvaises pratiques | Peu | Oui |
| Vitesse | Rapide | Plus lent avec types |
Lancer les deux : tsc --noEmit pour les types, ESLint pour la qualité ; dans l’intégration continue, séparer les étapes (voir Intégration continue et performance).
Dans un projet Astro ou React
Section intitulée « Dans un projet Astro ou React »La configuration TypeScript se combine avec les plugins dédiés : voir React, Astro et Next.js. Avec Vitest, les fichiers de test peuvent avoir des règles assouplies :
{ files: ['**/*.test.ts'], rules: { '@typescript-eslint/no-explicit-any': 'off', '@typescript-eslint/no-non-null-assertion': 'off', },}Fichiers de configuration en TypeScript
Section intitulée « Fichiers de configuration en TypeScript »eslint.config.ts est possible avec les versions récentes d’ESLint et le paquet jiti (npm install -D jiti) : la configuration est alors typée. Garder eslint.config.js tant que ce n’est pas nécessaire.
Dépannage
Section intitulée « Dépannage »| Symptôme | Piste |
|---|---|
Parsing error: Unexpected token : |
Analyseur TypeScript absent : utiliser tseslint.configs.* |
Parsing error: "parserOptions.project" has been provided … file was not found in the project |
Fichier hors de tsconfig.json : l’ajouter à include, ou le traiter avec disableTypeChecked |
Error: You have used a rule which requires type information |
projectService/project non défini |
Cannot find module 'typescript-eslint' |
npm install -D typescript-eslint |
| Analyse très lente | Règles avec types sur trop de fichiers, absence de --cache |
@typescript-eslint/no-unused-vars signale des types |
Utilisés seulement comme types : import type, ou règle configurée |
Conflit entre no-unused-vars et la version TypeScript |
Désactiver la règle de base (les jeux le font) |
| Version de TypeScript non prise en charge (avertissement) | Mettre à jour typescript-eslint |
Ubuntu 24.04 et 26.04 : différences à connaître
Section intitulée « Ubuntu 24.04 et 26.04 : différences à connaître »Aucune.