Линтинг с информацией о типах
Режим с типами включает правила, опирающиеся на типы TypeScript: например невыполненные промисы или небезопасные присваивания. В Oxlint это реализовано через tsgolint и интегрировано в CLI и конфигурацию.
Сейчас поддерживается 59 из 61 правил с типами из typescript-eslint. Покрытие, производительность и совместимость улучшаются.
Обзор
Обязанности разделены между компонентами:
Oxlint (Rust)
Обход файлов, игноры, конфигурация, правила без типов, вывод.tsgolint (Go)
Строит программы TypeScript черезtypescript-go, выполняет правила с типами и возвращает структурированные диагностики в Oxlint.
Установка
Нужна дополнительная зависимость:
npm add -D oxlint-tsgolint@latestpnpm add -D oxlint-tsgolint@latestyarn add -D oxlint-tsgolint@latestbun add -D oxlint-tsgolint@latestЗапуск линтинга с типами
Включить можно так:
- Флаг CLI:
--type-aware - Корневой конфиг:
options.typeAware: true
CLI:
oxlint --type-awareКорневой конфиг:
{
"options": {
"typeAware": true
}
}import { defineConfig } from "oxlint";
export default defineConfig({
options: {
typeAware: true,
},
});При включённом режиме Oxlint выполняет обычные правила и правила с типами в пространстве имён typescript/*.
--type-aware важнее конфига. Например, oxlint --type-aware -c .oxlintrc.json включает type-aware даже при options.typeAware: false в файле.
options.typeAware и options.typeCheck задаются только в корневом конфиге. Во вложенных конфигах эти поля не используйте.
В редакторах и LSP (например VS Code) type-aware включается опцией typeAware: true; см. страницу про редакторы.
Монорепозитории и артефакты сборки
Линтинг с типами требует разрешённых типов.
В монорепо:
- Соберите зависимые пакеты, чтобы были
.d.ts - Перед запуском установите зависимости
pnpm install
pnpm -r build
oxlint --type-awareДиагностики проверки типов
Включите проверку типов, чтобы видеть ошибки TypeScript вместе с линтом:
oxlint --type-aware --type-checkИли в корневом конфиге:
{
"options": {
"typeAware": true,
"typeCheck": true
}
}import { defineConfig } from "oxlint";
export default defineConfig({
options: {
typeAware: true,
typeCheck: true,
},
});--type-check важнее конфига. Например, oxlint --type-check -c .oxlintrc.json включает проверку типов даже при options.typeCheck: false.
Этот режим может заменить отдельный шаг tsc --noEmit в CI:
# раньше
tsc --noEmit
oxlint
# после
oxlint --type-aware --type-checkНастройка правил с типами
Как и остальные правила Oxlint.
{
"plugins": ["typescript"],
"rules": {
"typescript/no-floating-promises": "error",
"typescript/no-unsafe-assignment": "warn"
}
}import { defineConfig } from "oxlint";
export default defineConfig({
plugins: ["typescript"],
rules: {
"typescript/no-floating-promises": "error",
"typescript/no-unsafe-assignment": "warn",
},
});Опции совпадают с typescript-eslint.
{
"plugins": ["typescript"],
"rules": {
"typescript/no-floating-promises": ["error", { "ignoreVoid": true }]
}
}import { defineConfig } from "oxlint";
export default defineConfig({
plugins: ["typescript"],
rules: {
"typescript/no-floating-promises": ["error", { ignoreVoid: true }],
},
});Комментарии отключения
Поддерживаются инлайн-комментарии:
// oxlint-disable-next-line typescript/no-floating-promises
doSomethingAsync();Неиспользуемые директивы:
oxlint --type-aware --report-unused-disable-directivesСовместимость с TypeScript
Основа — typescript-go.
- Нужен TypeScript 7.0+
- Часть устаревших опций
tsconfigне поддерживается (напримерbaseUrlвtsconfig.json) - Если используются возможности, устаревшие в TS 6.0 или удалённые в 7.0, сначала мигрируйте кодовую базу
- Некорректные опции сообщаются при
--type-check
См. руководство по миграции TypeScript и при необходимости ts5to6 для tsconfig.
Стабильность
Линтинг с типами:
- Покрытие правил не полное (но уже очень близко)
- В очень больших проектах возможен высокий расход памяти
- Производительность продолжают улучшать
Устранение неполадок
Производительность и отладка
Если линтинг с типами медленный или жрёт память:
- Обновите оба инструмента:
oxlintoxlint-tsgolint
- Включите отладочный лог:
OXC_LOG=debug oxlint --type-awareПример вывода (ключевые этапы):
2026/01/01 12:00:00.000000 Starting tsgolint
2026/01/01 12:00:00.001000 Starting to assign files to programs. Total files: 259
2026/01/01 12:00:01.000000 Done assigning files to programs. Total programs: 8. Unmatched files: 75
2026/01/01 12:00:01.001000 Starting linter with 12 workers
2026/01/01 12:00:01.001000 Workload distribution: 8 programs
2026/01/01 12:00:01.002000 [1/8] Running linter on program: /path/to/project/jsconfig.json
...
2026/01/01 12:00:01.100000 [4/8] Running linter on program: /path/to/project/tsconfig.json
2026/01/01 12:00:02.500000 Program created with 26140 source files
2026/01/01 12:00:14.000000 /path/to/project/oxlint-plugin.mts
...
2026/01/01 12:00:14.100000 [5/8] Running linter on program: /path/to/project/apps/tsconfig.json
...
2026/01/01 12:00:15.000000 Linting Complete
Finished in 16.4s on 259 files with 161 rules using 12 threads.Как читать лог:
- Назначение файлов (
Starting to assign files...→Done assigning files...): сопоставление исходников и проектов tsconfig. Должно быть быстрым; если нет — сообщите в issue. - Линтинг программы (
[N/M] Running linter on program...): каждый проект TypeScript обрабатывается отдельно. Сильно более долгие программы могут указывать на тяжёлое разрешение типов или слишком большой проект.- Обратите внимание на огромное число файлов (например
Program created with 26140 source files) — возможно, вinclude/excludetsconfig попадает лишнее, вродеnode_modules. - Путь файла в логе показывает момент линтинга; большие паузы между файлами могут означать дорогое разрешение типов.
- Обратите внимание на огромное число файлов (например
Типичные проблемы производительности
Корневой tsconfig захватывает слишком много файлов
Слишком широкий include в корневом tsconfig.json может подтянуть весь репозиторий:
{
"include": ["**/*"] // ❌ Catches everything
}Вместе с артефактами сборки и лишними путями это сильно замедляет работу.
Исправление: сузьте include и добавьте exclude:
{
"include": ["src/**/*"], // ✅ Only source files
"exclude": ["dist", "build", "coverage"] // node_modules are excluded by default
}В монорепо корневой tsconfig.json не должен напрямую включать исходники пакетов:
{
"files": []
}Диагностика: включите отладочный лог и ищите программы с аномально большим числом файлов:
2026/01/01 12:00:02.500000 Program created with 26140 source filesЕсли в одной программе тысячи файлов — проверьте include/exclude этого tsconfig.
Дальше
- Реализованные правила
- Сообщения об ошибках: https://github.com/oxc-project/tsgolint