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。

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 格式。

// 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 代码检查。


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.jseslint.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.recommendedtseslint.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 低(风格) 代码风格统一

规则集文档:https://typescript-eslint.io/users/configs

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 强制一致使用 interfacetype 无类型
@typescript-eslint/consistent-type-imports 强制一致使用 import type 语法 无类型
@typescript-eslint/no-unused-vars 禁止未使用的变量 无类型
@typescript-eslint/switch-exhaustiveness-check 要求 switch 语句穷尽所有分支 类型感知

完整规则列表:https://typescript-eslint.io/rules/


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"]
  }
}

更多信息参见:

增量检查: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

  1. 安装扩展:ESLintdbaeumer.vscode-eslint
  2. 在项目根目录创建 .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 支持,无需额外安装插件:

  1. 打开 Settings > Languages & Frameworks > JavaScript > Code Quality Tools > ESLint
  2. 选择 Automatic ESLint configuration
  3. 勾选 Run eslint --fix on save

官方文档:https://www.jetbrains.com/help/webstorm/eslint.html

Vim / Neovim

使用 nvim-lintefm-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 通过配置文件忽略文件/目录

官方文档:https://eslint.org/docs/latest/use/configure/ignore

在 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 的 filesexclude 字段控制 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]

← 返回目录 | ← 返回总览