
typescript-eslint 的 recommended、strict 与 stylistic 共享配置怎么选【免费下载链接】typescript-eslint:sparkles: Monorepo for all the tooling which enables ESLint to support TypeScript项目地址: https://gitcode.com/GitHub_Trending/ty/typescript-eslint在 TypeScript 项目里用 typescript-eslint 工具链做 ESLint 检查时eslint.config.mjs的第一个决策就是把哪个共享配置写进extendstseslint.configs.recommended、tseslint.configs.strict还是tseslint.configs.stylistic。这三者不是三选一的互斥关系各自承担不同职责且有各自的稳定性保证。本文基于官方文档给出选择依据、对应的 flat config 写法以及如何运行验证配置生效。适用前提使用 ESLint 的 flat config 格式eslint.config.mjs通过主入口包typescript-eslint消费共享配置。准备条件安装与基础配置在项目中安装 ESLint、TypeScript 与 typescript-eslint 工具链npm install --save-dev eslint eslint/js typescript typescript-eslint然后在项目根目录创建eslint.config.mjs先写入最基础的recommended配置// ts-check import js from eslint/js; import { defineConfig } from eslint/config; import tseslint from typescript-eslint; export default defineConfig({ files: [**/*.{js,ts}], extends: [js.configs.recommended, tseslint.configs.recommended], });几个配置项的说明以 Quickstart 文档为准// ts-check让 TypeScript 类型检查配置文件本身便于编辑器提示与写配置时抓错如果与你的 TS 环境冲突可以删掉。defineConfig(...)是当前版本 ESLint 内置的可选辅助函数。files/extends组合会把extends中的配置限制在 JS/TS 文件上官方建议这样写以避免对 CSS、Markdown 等其他文件类型启用 ESLint 时出问题但完全可选。如需覆盖所有标准 JS/TS 扩展名可改用files: [**/*.{js,cjs,mjs,jsx,ts,cts,mts,tsx}]。文件名用.mjs是为了让 Node 按 ESM 处理该文件如果package.json中有type: module也可以用eslint.config.js。三个配置各自负责什么官方文档Shared Configurations对这三个配置的定位如下recommended面向代码正确性的规则可以drop in直接使用、无需额外配置。这些规则的告警几乎都是坏实践或大概率是 bug。它同时会禁用那些与 typescript-eslint 规则冲突、或在 TypeScript 代码库中会出问题的核心 ESLint 规则。strict包含全部recommended再加上一批同样能抓 bug、但更opinionated主观倾向更强的规则这些规则不一定适合所有项目。另外一些在recommended中已启用的规则在strict里默认采用更严格的设置。stylistic现代 TypeScript 代码库的最佳实践规则但不影响程序逻辑普遍倾向强制更简洁的代码模式。注意stylistic不替代recommended或strict它在正确性配置之上追加规则所以要和其中一个正确性配置一起用而不是二选一。具体的规则清单可以直接在仓库源码中核对例如 strict 配置、recommended 配置、stylistic 配置。按团队情况选择是否升级到 strict选择recommended还是strict文档给出的判断标准是团队构成而不是技术偏好If a majority of developers working on your project are comfortable with TypeScript and typescript-eslint, consider replacingrecommendedwithstrict.即当项目中大多数开发者熟悉 TypeScript 和 typescript-eslint 时才考虑用strict替换recommended。官方在strict章节还有同样的提示只有当非微不足道比例a nontrivial percentage的开发者高度熟悉 TypeScript 时才建议扩展strict。对于没有开启类型感知 linting 的项目官方建议的起步组合是recommendedstylisticexport default defineConfig({ files: [**/*.{js,ts}], extends: [ js.configs.recommended, tseslint.configs.recommended, tseslint.configs.stylistic, ], });团队符合条件时把tseslint.configs.recommended一行换成tseslint.configs.strict即可stylistic保留export default defineConfig({ files: [**/*.{js,ts}], extends: [ js.configs.recommended, tseslint.configs.strict, tseslint.configs.stylistic, ], });可选分支项目开启了类型检查如果项目开启了 typed linting官方建议的起步组合换成带类型信息的版本recommended-type-checkedstylistic-type-checked团队熟悉度符合上面的条件时再把前者换成strict-type-checkedexport default defineConfig( { files: [**/*.{js,ts}], extends: [ js.configs.recommended, tseslint.configs.recommendedTypeChecked, tseslint.configs.stylisticTypeChecked, ], }, // 其余配置如 languageOptions.parserOptions... );使用 type-checked 配置还必须按 Typed Linting 文档 配置languageOptions.parserOptions否则类型感知规则无法工作。运行与验证在项目根目录运行npx eslint .使用 Yarn 或 pnpm 的项目对应yarn eslint ./pnpm eslint .。ESLint 会检查当前目录下所有 TypeScript 兼容文件并把结果输出到终端。验证配置是否生效可以从两个角度判断命令能正常跑完并输出检查报告说明extends中的共享配置加载成功。切换配置前后告警集合的变化符合各配置的定位从recommended升到strict后会多出strict特有规则的报错如 strict 源码 中列出的typescript-eslint/no-non-null-assertion、typescript-eslint/no-unsafe-function-type、typescript-eslint/triple-slash-reference等加上stylistic后则多出风格类规则的报错但不影响逻辑检查。官方明确说明这些共享配置是推荐起点但不要求原样使用ESLint 允许在扩展共享配置的基础上单独配置规则在自己的配置块里写rules覆盖即可觉得某条规则不适合项目时可以逐条调整而不必在配置之间来回取舍。稳定性与边界选择时还要注意各配置的稳定性差异以 Shared Configurations 文档 为准除all、strict和strict-type-checked之外其余配置都视为stable规则的增删属于 breaking change只会在主版本升级时发生。strict与strict-type-checked不受 semver 稳定性约束其启用的规则和/或选项可能在非主版本更新中变化。升级 minor 版本后如果strict的报错集合发生变化这是文档声明过的行为不是配置被破坏。typescript-eslint 的任何预设配置都不启用格式化规则只约束空白与格式碎片的规则。官方强烈建议用 Prettier 或同类工具做格式化而不是 ESLint 格式化规则参见 What About Formatting?。官方同样不推荐直接扩展all规则互相冲突、很多规则需要按项目配置base也仅用于内部基础、不推荐直接使用——正常项目的正确性配置仍应落在recommended/strict及对应 type-checked 版本上。下一步需要启用类型感知 linting 时按 Typed Linting 配置languageOptions.parserOptions再把组合升级为 type-checked 版本。需要单独调整某条规则时查看 规则文档入口 中指向的规则列表或在 Shared Configurations 文档 中按配置名定位对应章节。仍跑不通时参考 Quickstart 指向的 Troubleshooting FAQs。【免费下载链接】typescript-eslint:sparkles: Monorepo for all the tooling which enables ESLint to support TypeScript项目地址: https://gitcode.com/GitHub_Trending/ty/typescript-eslint创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考