В стандартной конфигурации ESLint анализирует JavaScript-код с помощью встроенного парсера Espree. При работе с TypeScript такой подход становится ограничением, поскольку синтаксис TypeScript включает конструкции, отсутствующие в чистом Jav * aScript: типы, интерфейсы, перечисления, generics и модификаторы доступа.
Пакет @typescript-eslint/parser решает эту проблему, обеспечивая корректное преобразование TypeScript-кода в AST (Abstract Syntax Tree), понятное ESLint. Это позволяет применять правила линтинга к проектам, использующим TypeScript, без потери информации о типах и специфичных конструкциях языка.
Для корректной работы ESLint с TypeScript требуется несколько зависимостей:
Установка через npm:
npm install --save-dev eslint typescript @typescript-eslint/parser @typescript-eslint/eslint-plugin
При использовании pnpm:
pnpm add -D eslint typescript @typescript-eslint/parser @typescript-eslint/eslint-plugin
При использовании yarn:
yarn add -D eslint typescript @typescript-eslint/parser @typescript-eslint/eslint-plugin
Конфигурация ESLint традиционно задаётся через файл
.eslintrc.* или через новый формат flat config
(eslint.config.js).
{
"parser": "@typescript-eslint/parser",
"plugins": ["@typescript-eslint"],
"extends": [
"eslint:recommended",
"plugin:@typescript-eslint/recommended"
]
}
В данной конфигурации:
parser заменяет стандартный парсер ESLint на
TypeScript-совместимыйplugins подключает набор TypeScript-правилextends добавляет базовые и рекомендованные
правилаКлючевая часть конфигурации — блок parserOptions,
который определяет, как именно анализируется TypeScript-код.
{
"parser": "@typescript-eslint/parser",
"parserOptions": {
"ecmaVersion": 2022,
"sourceType": "module"
}
}
Для включения правил, использующих информацию о типах, необходимо
указать tsconfig.json:
{
"parser": "@typescript-eslint/parser",
"parserOptions": {
"project": "./tsconfig.json",
"tsconfigRootDir": "./",
"sourceType": "module"
}
}
project Указывает путь к
tsconfig.json. Включает type-aware linting, позволяющий
анализировать типы, а не только синтаксис.
tsconfigRootDir Определяет корневую директорию для поиска конфигурации TypeScript. Особенно важно в монорепозиториях.
ecmaVersion Указывает версию ECMAScript, влияющую на поддержку синтаксиса JavaScript.
sourceType Обычно устанавливается в
"module" для поддержки ES Modules.
При использовании параметра project ESLint начинает
выполнять полноценный анализ TypeScript через Program API
компилятора.
Это включает:
Использование режима с project влияет на
производительность:
Поэтому в некоторых случаях используется разделение конфигураций:
Современный формат конфигурации ESLint использует JavaScript-модуль вместо JSON.
import tsParser from "@typescript-eslint/parser";
import tsPlugin from "@typescript-eslint/eslint-plugin";
export default [
{
files: ["**/*.ts"],
languageOptions: {
parser: tsParser,
parserOptions: {
ecmaVersion: 2022,
sourceType: "module",
project: "./tsconfig.json",
tsconfigRootDir: import.meta.dirname
}
},
plugins: {
"@typescript-eslint": tsPlugin
},
rules: {
...tsPlugin.configs.recommended.rules
}
}
];
В монорепозиториях часто используется несколько
tsconfig.json для разных пакетов. В этом случае требуется
корректная настройка parserOptions.project.
Пример структуры:
packages/
core/
tsconfig.json
ui/
tsconfig.json
Конфигурация ESLint:
{
"parser": "@typescript-eslint/parser",
"parserOptions": {
"project": [
"./packages/core/tsconfig.json",
"./packages/ui/tsconfig.json"
],
"tsconfigRootDir": "./"
}
}
В сложных проектах используется tsconfig.eslint.json,
объединяющий все файлы, чтобы ускорить анализ.
Причина обычно связана с неверным tsconfigRootDir.
Корректный вариант:
{
"parserOptions": {
"project": "./tsconfig.json",
"tsconfigRootDir": "./"
}
}
Возникает при:
Частая причина — подключён только parser без plugin:
{
"plugins": ["@typescript-eslint"]
}
Без плагина правила TypeScript не активируются.
Практически применимая конфигурация:
{
"parser": "@typescript-eslint/parser",
"parserOptions": {
"ecmaVersion": "latest",
"sourceType": "module",
"project": "./tsconfig.eslint.json",
"tsconfigRootDir": "./"
},
"plugins": ["@typescript-eslint"],
"extends": [
"eslint:recommended",
"plugin:@typescript-eslint/recommended-type-checked"
]
}
@typescript-eslint предоставляет несколько уровней наборов правил:
recommended — базовый набор без анализа типовrecommended-type-checked — расширенный набор с
type-aware анализомstrict — максимально строгие правилаstrict-type-checked — строгие правила с использованием
типовИспользование более строгих наборов увеличивает точность анализа, но повышает стоимость проверки проекта.
Совместимость parser зависит от версии TypeScript. При обновлении возможны изменения в:
Рекомендуется синхронизировать версии:
Несовместимость версий приводит к ошибкам парсинга или некорректной работе правил.
Для больших проектов применяются следующие подходы:
tsconfig.eslint.jsonfiles в flat configparserOptions.projectПример облегчённого tsconfig:
{
"extends": "./tsconfig.json",
"include": ["src/**/*.ts"],
"exclude": ["node_modules", "dist", "tests"]
}
В редакторах (VS Code, WebStorm) парсер используется через ESLint
integration, поэтому корректность parserOptions критична
для одинакового поведения в:
Расхождение конфигураций приводит к ситуации, когда ошибки видны только в одной среде, что усложняет отладку.