typescript-eslint
相关工具推荐
| 工具 | 说明 |
|---|---|
| ESLint | JS/TS 代码检查事实标准,typescript-eslint 基于 ESLint 运行 |
| Prettier | 代码格式化工具,与 typescript-eslint 互补协作 |
| Pre-commit | Git 提交前钩子框架,可集成 ESLint/typescript-eslint |
1. 简介
typescript-eslint 是 TypeScript 官方的 ESLint 集成工具,为 ESLint 提供 TypeScript 语言支持,包括 TypeScript 解析器(Parser)、类型感知 Lint 规则以及 100+ 条 TypeScript 专用规则。它是 TypeScript 生态中代码质量检查的事实标准。
- 主要检查语言:TypeScript
- 主要检查能力:让 ESLint 支持 TypeScript 语法解析与类型感知检查;涵盖代码质量、类型安全、代码风格、最佳实践
- 核心检查原理:基于 TypeScript 编译器 API,提供类型感知(Typed Linting)能力
- 检查规则/选项:100+ 条规则(按 recommended、strict、stylistic 三种配置组分类),全量规则列表
- GitHub 仓库:https://github.com/typescript-eslint/typescript-eslint(16,268 stars)
- 开源协议:MIT
- 最新稳定版本:v8.29.0
- 运行环境要求:Node.js 18+;需 TypeScript 4.7.4+
- 误报率:低
typescript-eslint 由以下核心包组成:
typescript-eslint:统一入口包(v8+),包含解析器和插件,推荐使用此包@typescript-eslint/parser:ESLint 的 TypeScript 解析器,将 TypeScript 代码解析为 ESLint 兼容的 AST@typescript-eslint/eslint-plugin:包含 100+ 条 TypeScript 规则的 ESLint 插件@typescript-eslint/type-utils和@typescript-eslint/typescript-estree:底层工具包
2. 官方文档
| 资源 | 链接 | 说明 |
|---|---|---|
| 官方首页 | https://typescript-eslint.io/ | 项目介绍与快速入门 |
| 快速入门(Flat Config) | https://typescript-eslint.io/getting-started | 从零开始的配置指南 |
| 类型感知 Lint 指南 | https://typescript-eslint.io/getting-started/typed-linting | 启用类型检查规则 |
| 旧版 ESLint 配置指南 | https://typescript-eslint.io/getting-started/legacy-eslint-setup | .eslintrc 格式配置 |
| 规则列表 | https://typescript-eslint.io/rules/ | 全部 100+ 条规则文档 |
| 共享配置(规则集) | https://typescript-eslint.io/users/configs | recommended / strict / stylistic 等 |
| 解析器文档 | https://typescript-eslint.io/packages/parser | parser 选项说明 |
| 插件文档 | https://typescript-eslint.io/packages/eslint-plugin | 插件使用说明 |
| 故障排除 FAQ | https://typescript-eslint.io/troubleshooting/faqs/general | 常见问题解答 |
| GitHub 仓库 | https://github.com/typescript-eslint/typescript-eslint | 源码与 Issue |
3. 社区优秀实践
3.1 Next.js
Next.js 是 Vercel 维护的全栈 React 框架,在其官方 ESLint 配置包 eslint-config-next 中深度集成了 typescript-eslint。
- 仓库地址:https://github.com/vercel/next.js
- 官方文档:https://nextjs.org/docs/app/building-your-application/configuring/eslint
Next.js 提供多种配置预设,其中 eslint-config-next/typescript 添加了 typescript-eslint 规则:
// eslint.config.mjs(Next.js 项目)
import { defineConfig, globalIgnores } from "eslint/config";
import nextVitals from "eslint-config-next/core-web-vitals";
import nextTs from "eslint-config-next/typescript";
const eslintConfig = defineConfig([
...nextVitals,
...nextTs,
globalIgnores([".next/**", "out/**", "build/**", "next-env.d.ts"]),
]);
export default eslintConfig;
3.2 Nuxt
Nuxt 是 Vue.js 全栈框架,通过 @nuxt/eslint 模块提供对 typescript-eslint 的一体化支持,采用 ESLint v9 Flat Config 格式。
- 仓库地址:https://github.com/nuxt/nuxt
- ESLint 模块文档:https://eslint.nuxt.com
// eslint.config.mjs(Nuxt 项目)
import withNuxt from "./.nuxt/eslint.config.mjs";
export default withNuxt(
// 自定义配置
);
3.3 Vue.js 官方 -- eslint-plugin-vue
Vue.js 官方维护了 eslint-plugin-vue 插件,提供了 Vue 3 SFC(单文件组件)的代码检查规则,与 typescript-eslint 配合使用可覆盖 <template>、<script setup> 中 TypeScript 代码的检查。
3.4 React 官方 -- eslint-plugin-react-hooks
React 官方维护了 eslint-plugin-react-hooks 插件,用于强制执行 React Hooks 的规则。该插件是 React 生态中最核心的 ESLint 插件之一,与 typescript-eslint 配合使用可提供完整的 TypeScript + React 代码检查。
- GitHub 仓库:https://github.com/facebook/react
- 官方文档:https://react.dev/reference/eslint-plugin-react-hooks
4. 工具配置说明
4.1 配置文件说明
typescript-eslint 涉及以下配置文件:
| 配置文件 | 用途 | 使用场景 |
|---|---|---|
eslint.config.js / eslint.config.mjs |
ESLint Flat Config 配置文件(ESLint v9+),声明规则集、类型感知、文件覆盖等 | 所有 TypeScript/JavaScript 项目,控制 lint 行为 |
ESLint v9+ 推荐使用 Flat Config 格式(eslint.config.js 或 eslint.config.mjs)。
官方配置文档:https://typescript-eslint.io/getting-started#step-2-configuration
4.2 eslint.config.js 配置详解
eslint.config.js 是 typescript-eslint 的主配置文件,通过 extends 组合规则集,通过 languageOptions 配置类型感知,通过 rules 覆盖默认规则。
配置项说明:
| 配置项 | 类型 | 说明 |
|---|---|---|
files |
string[] | 配置作用范围(glob 模式,如 **/*.ts) |
extends |
array | 继承的规则集列表(如 js.configs.recommended、tseslint.configs.recommended) |
languageOptions.parserOptions.projectService |
bool | 启用类型感知 Lint(需 TypeScript 项目) |
languageOptions.parserOptions.tsconfigRootDir |
string | tsconfig.json 所在目录(通常为 import.meta.dirname) |
rules |
map | 规则覆盖,键为规则名,值为规则配置("off" / "warn" / "error" 或带选项的数组) |
js.configs.recommended |
规则集 | ESLint 官方推荐规则 |
tseslint.configs.recommended |
规则集 | typescript-eslint 推荐规则(约 25 条) |
tseslint.configs.strict |
规则集 | 严格规则,包含 recommended + 更多 opinionated 规则 |
tseslint.configs.stylistic |
规则集 | 代码风格规则 |
tseslint.configs.recommendedTypeChecked |
规则集 | 需要类型信息的推荐规则(约 40 条) |
tseslint.configs.strictTypeChecked |
规则集 | 需要类型信息的严格规则(约 60+ 条) |
tseslint.configs.stylisticTypeChecked |
规则集 | 需要类型的代码风格规则 |
tseslint.configs.disableTypeChecked |
规则集 | 禁用类型感知规则(用于 JS 文件) |
defineConfig()是 ESLint 内置的辅助函数,files字段用于限制配置的作用范围。
推荐配置示例:
strict-type-checked 配置(最高质量要求,适用于对代码质量有严格要求的生产项目,团队对 TypeScript 有较高熟练度):
注意:
strict-type-checked配置在语义化版本控制下不被视为"稳定",其规则和选项可能在非主版本更新中变更。
// eslint.config.mjs
// @ts-check
import js from "@eslint/js";
import { defineConfig } from "eslint/config";
import tseslint from "typescript-eslint";
export default defineConfig(
// 主配置:对所有 TS/JS 文件生效
{
files: ["**/*.{js,cjs,mjs,jsx,ts,cts,mts,tsx}"],
extends: [
js.configs.recommended, // ESLint 官方推荐规则
tseslint.configs.recommended, // TS 推荐规则(无类型检查)
tseslint.configs.strict, // TS 严格规则(无类型检查)
tseslint.configs.stylistic, // TS 代码风格规则(无类型检查)
tseslint.configs.recommendedTypeChecked, // TS 推荐规则(需类型检查)
tseslint.configs.strictTypeChecked, // TS 严格规则(需类型检查)
tseslint.configs.stylisticTypeChecked, // TS 代码风格规则(需类型检查)
],
languageOptions: {
parserOptions: {
projectService: true, // 启用类型感知 Lint
tsconfigRootDir: import.meta.dirname,
},
},
rules: {
// ---- 项目自定义规则覆盖 ----
// 未使用变量:允许以 _ 开头的参数(常用于回调函数)
"@typescript-eslint/no-unused-vars": [
"error",
{
argsIgnorePattern: "^_",
varsIgnorePattern: "^_",
caughtErrorsIgnorePattern: "^_",
},
],
// 禁止 any:对测试文件放宽限制(在 files overrides 中配置)
"@typescript-eslint/no-explicit-any": "error",
// 允许 console.warn 和 console.error(仅禁止 console.log)
"no-console": ["error", { allow: ["warn", "error"] }],
},
},
// JS 文件禁用类型检查规则(提升性能)
{
files: ["**/*.js", "**/*.cjs", "**/*.mjs"],
extends: [tseslint.configs.disableTypeChecked],
},
// 测试文件放宽规则
{
files: ["**/*.test.ts", "**/*.spec.ts", "**/*.test.tsx", "**/*.spec.tsx"],
rules: {
"@typescript-eslint/no-explicit-any": "off",
"@typescript-eslint/no-unsafe-argument": "off",
"@typescript-eslint/no-unsafe-assignment": "off",
"@typescript-eslint/no-unsafe-call": "off",
"@typescript-eslint/no-unsafe-member-access": "off",
"@typescript-eslint/no-unsafe-return": "off",
"@typescript-eslint/unbound-method": "off",
},
},
// 配置文件放宽规则
{
files: ["*.config.ts", "*.config.mjs"],
rules: {
"@typescript-eslint/no-explicit-any": "off",
},
},
);
recommended-type-checked 配置(生产项目推荐,平衡严格程度与开发体验):
// eslint.config.mjs
// @ts-check
import js from "@eslint/js";
import { defineConfig } from "eslint/config";
import tseslint from "typescript-eslint";
export default defineConfig(
{
files: ["**/*.{js,cjs,mjs,jsx,ts,cts,mts,tsx}"],
extends: [
js.configs.recommended,
tseslint.configs.recommended,
tseslint.configs.stylistic,
tseslint.configs.recommendedTypeChecked,
tseslint.configs.stylisticTypeChecked,
],
languageOptions: {
parserOptions: {
projectService: true,
tsconfigRootDir: import.meta.dirname,
},
},
rules: {
"@typescript-eslint/no-unused-vars": [
"warn",
{ argsIgnorePattern: "^_" },
],
"@typescript-eslint/no-explicit-any": "warn",
},
},
{
files: ["**/*.js", "**/*.cjs", "**/*.mjs"],
extends: [tseslint.configs.disableTypeChecked],
},
);
recommended 配置(快速上手,无需类型信息,适用于新项目快速启用基本检查):
// eslint.config.mjs
// @ts-check
import js from "@eslint/js";
import { defineConfig } from "eslint/config";
import tseslint from "typescript-eslint";
export default defineConfig({
files: ["**/*.{js,cjs,mjs,jsx,ts,cts,mts,tsx}"],
extends: [
js.configs.recommended,
tseslint.configs.recommended,
tseslint.configs.stylistic,
],
});
4.3 规则集对比
| 配置集 | 需要类型信息 | 严格程度 | 适用场景 |
|---|---|---|---|
recommended |
否 | 中 | 一般项目 |
strict |
否 | 高 | TS 熟练团队 |
recommendedTypeChecked |
是 | 中高 | 生产项目 |
strictTypeChecked |
是 | 最高 | 高质量要求项目 |
stylistic |
否 | 低(风格) | 代码风格统一 |
stylisticTypeChecked |
是 | 低(风格) | 代码风格统一 |
4.4 strict-type-checked 关键规则说明
以下是 strict-type-checked 配置集中包含的部分核心规则及其说明:
| 规则 | 说明 | 类型 |
|---|---|---|
@typescript-eslint/await-thenable |
禁止对非 Thenable 值使用 await | 类型感知 |
@typescript-eslint/no-explicit-any |
禁止使用 any 类型 |
无类型 |
@typescript-eslint/no-floating-promises |
要求正确处理 Promise(禁止未处理的浮空 Promise) | 类型感知 |
@typescript-eslint/no-misused-promises |
禁止在不适当的位置使用 Promise | 类型感知 |
@typescript-eslint/no-unsafe-argument |
禁止将 any 类型的值作为函数参数传入 |
类型感知 |
@typescript-eslint/no-unsafe-assignment |
禁止将 any 类型的值赋给变量和属性 |
类型感知 |
@typescript-eslint/no-unsafe-call |
禁止调用 any 类型的表达式 |
类型感知 |
@typescript-eslint/no-unsafe-member-access |
禁止访问 any 类型值的成员 |
类型感知 |
@typescript-eslint/no-unsafe-return |
禁止函数返回 any 类型的值 |
类型感知 |
@typescript-eslint/no-unnecessary-condition |
禁止类型总是为真或总是为假的条件判断 | 类型感知 |
@typescript-eslint/no-unnecessary-type-assertion |
禁止不改变类型的类型断言 | 类型感知 |
@typescript-eslint/only-throw-error |
禁止抛出非 Error 值的异常 | 类型感知 |
@typescript-eslint/prefer-nullish-coalescing |
推荐使用 ?? 替代 || |
类型感知 |
@typescript-eslint/prefer-optional-chain |
推荐使用可选链 ?. |
类型感知 |
@typescript-eslint/restrict-plus-operands |
要求 + 运算符两端类型一致 |
类型感知 |
@typescript-eslint/restrict-template-expressions |
要求模板表达式为字符串类型 | 类型感知 |
@typescript-eslint/require-await |
禁止没有 await 表达式的 async 函数 | 类型感知 |
@typescript-eslint/unbound-method |
强制未绑定的方法必须在其预期作用域内调用 | 类型感知 |
@typescript-eslint/consistent-type-definitions |
强制一致使用 interface 或 type |
无类型 |
@typescript-eslint/consistent-type-imports |
强制一致使用 import type 语法 |
无类型 |
@typescript-eslint/no-unused-vars |
禁止未使用的变量 | 无类型 |
@typescript-eslint/switch-exhaustiveness-check |
要求 switch 语句穷尽所有分支 | 类型感知 |
5. 主流集成方式
5.1 npm/pnpm/yarn + lint-staged(生态主流集成,优先推荐)
通过 husky + lint-staged 在 Git 提交前自动检查暂存文件,这是 JS/TS 生态中最主流的本地提交门禁集成方式。
安装 ESLint 与 typescript-eslint:
# 使用 npm
npm install --save-dev eslint @eslint/js typescript typescript-eslint
# 使用 pnpm
pnpm add -D eslint @eslint/js typescript typescript-eslint
# 使用 yarn
yarn add -D eslint @eslint/js typescript typescript-eslint
官方安装文档:https://typescript-eslint.io/getting-started#step-1-installation
安装依赖:
npm install --save-dev husky lint-staged
配置 husky:
npx husky init
修改 .husky/pre-commit:
npx lint-staged
配置 package.json:
{
"scripts": {
"prepare": "husky"
},
"lint-staged": {
"*.{ts,tsx,js,jsx,cjs,mjs}": ["eslint --fix"]
}
}
更多信息参见:
- husky 官方文档:https://typicode.github.io/husky/
- lint-staged 仓库:https://github.com/okonet/lint-staged
增量检查:lint-staged 仅对 Git 暂存区的文件运行 ESLint,是最高效的增量检查方式。除在 package.json 中配置外,也可使用独立配置文件:
// .lintstagedrc.js
export default {
"*.{ts,tsx}": ["eslint --fix"],
};
5.2 pre-commit 集成
通过 pre-commit 框架在 Git 提交前自动运行 ESLint,适合多语言项目中统一管理钩子。
依赖来源:使用 language: node + additional_dependencies 安装 ESLint 和 typescript-eslint,需要本地 Node.js 环境。
# .pre-commit-config.yaml
repos:
- repo: https://github.com/pre-commit/mirrors-eslint
rev: v9.28.0
hooks:
- id: eslint
args: [--fix]
files: \.(js|jsx|ts|tsx|cjs|mjs)$
additional_dependencies:
- typescript-eslint
- eslint-plugin-react-hooks
适用前提:需要本地安装 Node.js 环境(
language: node)。pre-commit 默认仅把暂存区中变更文件传给 hook,天然支持增量检查。
5.3 IDE 集成
VS Code
- 安装扩展:ESLint(
dbaeumer.vscode-eslint) - 在项目根目录创建
.vscode/settings.json:
{
"editor.formatOnSave": false,
"editor.codeActionsOnSave": {
"source.fixAll.eslint": "explicit",
"source.organizeImports": "never"
},
"eslint.validate": [
"javascript",
"javascriptreact",
"typescript",
"typescriptreact",
"vue"
],
"eslint.useFlatConfig": true
}
扩展市场地址:https://marketplace.visualstudio.com/items?itemName=dbaeumer.vscode-eslint
IntelliJ / WebStorm
WebStorm 内置 ESLint 支持,无需额外安装插件:
- 打开 Settings > Languages & Frameworks > JavaScript > Code Quality Tools > ESLint
- 选择 Automatic ESLint configuration
- 勾选 Run eslint --fix on save
Vim / Neovim
使用 nvim-lint 或 efm-langserver 集成:
nvim-lint 配置:
require('lint').linters_by_ft = {
typescript = { 'eslint' },
typescriptreact = { 'eslint' },
}
vim.api.nvim_create_autocmd({ 'BufWritePost' }, {
callback = function()
require('lint').try_lint()
end,
})
5.4 命令行使用方式
# 检查所有文件
npx eslint .
# 检查指定目录
npx eslint src/
# 检查指定文件类型
npx eslint "src/**/*.{ts,tsx}"
# 自动修复可修复的问题
npx eslint . --fix
# 仅预览修复结果(不写入文件)
npx eslint . --fix-dry-run
# 仅显示错误(不显示警告)
npx eslint . --quiet
# 指定配置文件
npx eslint . --config eslint.config.js
# 设置最大警告数(超过则失败)
npx eslint . --max-warnings 0
# 输出格式化为 JSON(便于工具处理)
npx eslint . --format json
# 使用缓存加速(仅检查变更文件)
npx eslint . --cache --cache-location .eslintcache
完整 CLI 文档:https://eslint.org/docs/latest/use/command-line-interface
增量检查:ESLint 内置 --cache 缓存机制,仅对修改过的文件执行检查:
{
"scripts": {
"lint": "eslint . --cache --cache-location .eslintcache"
}
}
首次运行后,后续运行仅检查变更的文件,大幅提升速度。也可使用 git diff 获取变更文件列表,传递给 ESLint:
# 检查暂存区中新增或修改的 TS/TSX 文件
npx eslint $(git diff --cached --name-only --diff-filter=ACMR -- '*.ts' '*.tsx')
# 检查相对于 main 分支的所有变更文件
npx eslint $(git diff --name-only main -- '*.ts' '*.tsx')
--cache官方文档:https://eslint.org/docs/latest/use/command-line-interface#--cache
CI 脚本调用:在 CI 环境中通过脚本调用 ESLint 进行代码检查。
GitHub Actions
# .github/workflows/lint.yml
name: Lint
on: [push, pull_request]
jobs:
eslint:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: "22"
cache: "pnpm"
- run: pnpm install --frozen-lockfile
- run: pnpm lint
GitLab CI
# .gitlab-ci.yml
lint:
image: node:22
before_script:
- corepack enable
- pnpm install --frozen-lockfile
script:
- pnpm lint
cache:
key:
files:
- pnpm-lock.yaml
paths:
- node_modules/
增量检查:GitHub Actions 中按 PR 变更文件触发增量检查:
# .github/workflows/lint.yml
name: Lint
on: [pull_request]
jobs:
eslint:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0 # 获取完整历史,用于 git diff
- uses: actions/setup-node@v4
with:
node-version: "22"
cache: "pnpm"
- run: pnpm install --frozen-lockfile
- name: Lint changed files
run: |
CHANGED=$(git diff --name-only origin/main -- '*.ts' '*.tsx' | grep -v '\.d\.ts$' || true)
if [ -n "$CHANGED" ]; then
npx eslint $CHANGED
fi
5.5 构建工具集成(package.json scripts)
在 package.json 中添加 lint 脚本:
{
"scripts": {
"lint": "eslint .",
"lint:fix": "eslint . --fix",
"lint:ci": "eslint . --max-warnings=0"
}
}
Vite 项目中集成开发服务器实时检查:
安装 vite-plugin-eslint:
npm install --save-dev vite-plugin-eslint
在 vite.config.ts 中配置:
import { defineConfig } from "vite";
import eslintPlugin from "vite-plugin-eslint";
export default defineConfig({
plugins: [
eslintPlugin({
include: ["src/**/*.ts", "src/**/*.tsx"],
}),
],
});
注意:
vite-plugin-eslint主要用于开发阶段的实时反馈,不建议替代 CI 中的完整 lint 检查。
6. 告警抑制(屏蔽)方法
typescript-eslint 继承了 ESLint 的所有告警抑制机制。以下列出所有可用的屏蔽方式,每种方式均附官方文档链接。
6.1 通过代码注释屏蔽
行内注释屏蔽
官方文档:https://eslint.org/docs/latest/use/configure/rules#use-configuration-comments
屏蔽下一行:
// eslint-disable-next-line @typescript-eslint/no-explicit-any
const data: any = fetchFromAPI();
屏蔽当前行:
const data: any = fetchFromAPI(); // eslint-disable-line @typescript-eslint/no-explicit-any
屏蔽多条规则:
// eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-assignment
const data: any = JSON.parse(response);
块级注释屏蔽
官方文档:https://eslint.org/docs/latest/use/configure/rules#disable-rules
/* eslint-disable @typescript-eslint/no-explicit-any */
function legacyHandler(input: any): any {
return input;
}
/* eslint-enable @typescript-eslint/no-explicit-any */
屏蔽所有规则:
/* eslint-disable */
// 此处代码不会被任何规则检查
/* eslint-enable */
文件级注释屏蔽
在文件顶部添加注释,禁用整个文件的检查:
/* eslint-disable @typescript-eslint/no-explicit-any */
// 整个文件禁用指定规则
或禁用所有规则:
/* eslint-disable */
// 整个文件不进行任何 ESLint 检查
使用 @ts-expect-error 替代 @ts-ignore
规则文档:https://typescript-eslint.io/rules/prefer-ts-expect-error
typescript-eslint 推荐使用 @ts-expect-error 替代 @ts-ignore:
// 推荐:使用 @ts-expect-error(如果下一行没有错误会报错提醒你删除注释)
// @ts-expect-error
const result = someLegacyFunction();
// 不推荐:使用 @ts-ignore(即使下一行没有错误也不会提醒)
// @ts-ignore
const result = someLegacyFunction();
6.2 通过工具配置文件屏蔽
官方文档(规则配置):https://eslint.org/docs/latest/use/configure/rules#use-configuration-files
在 eslint.config.js 中通过 rules 字段关闭特定规则:
export default defineConfig({
rules: {
"@typescript-eslint/no-explicit-any": "off", // 关闭规则
"@typescript-eslint/no-unused-vars": "warn", // 降级为警告
"@typescript-eslint/no-unsafe-assignment": "off",
},
});
针对特定文件禁用
通过 files + rules 为特定文件禁用规则:
export default defineConfig(
// ...其他配置
{
files: ["**/*.test.ts", "**/*.spec.ts"],
rules: {
"@typescript-eslint/no-explicit-any": "off",
"@typescript-eslint/unbound-method": "off",
},
},
{
files: ["**/legacy/**/*.ts"],
rules: {
"@typescript-eslint/no-var-requires": "off",
"@typescript-eslint/no-explicit-any": "off",
},
},
);
6.3 通过配置文件忽略文件/目录
在 Flat Config 中使用 globalIgnores() 忽略文件和目录:
import { defineConfig, globalIgnores } from "eslint/config";
export default defineConfig([
globalIgnores(["node_modules/", "dist/", "build/", "*.config.ts"]),
]);
6.4 通过工具命令行参数屏蔽
官方文档(CLI 选项):https://eslint.org/docs/latest/use/command-line-interface
# 运行时关闭特定规则
npx eslint . --rule '@typescript-eslint/no-explicit-any: off'
# 忽略指定模式的文件
npx eslint . --ignore-pattern "dist/**" --ignore-pattern "vendor/**"
# 禁用所有行内配置注释(CI 环境推荐)
npx eslint . --no-inline-config
# 报告未使用的 eslint-disable 指令(推荐)
npx eslint . --report-unused-disable-directives
6.5 通过集成调度工具屏蔽
lint-staged 文件匹配
通过 lint-staged 的 glob 模式,仅对匹配的文件运行 lint,天然屏蔽不匹配的文件:
// .lintstagedrc.js
export default {
// 仅对 src 目录下的 TS/TSX 文件执行 lint
"src/**/*.{ts,tsx}": ["eslint --fix"],
// 对 JSON 和 Markdown 执行 prettier
"*.{json,md}": ["prettier --write"],
};
pre-commit include/exclude
通过 pre-commit 的 files 和 exclude 字段控制 hook 触发范围:
# .pre-commit-config.yaml
repos:
- repo: https://github.com/pre-commit/mirrors-eslint
rev: v9.28.0
hooks:
- id: eslint
files: \.(js|jsx|ts|tsx|cjs|mjs)$
exclude: ^(vendor|node_modules)/
args: [--fix]