news 2026/9/14 4:25:39

typescript-eslint 的 recommended、strict 与 stylistic 共享配置怎么选?

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
typescript-eslint 的 recommended、strict 与 stylistic 共享配置怎么选?

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.recommendedtseslint.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不替代recommendedstrict,它在正确性配置之上追加规则,所以要和其中一个正确性配置一起用,而不是二选一。

具体的规则清单可以直接在仓库源码中核对,例如 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 的项目,官方建议的起步组合是recommended+stylistic

export 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-checked+stylistic-type-checked;团队熟悉度符合上面的条件时,再把前者换成strict-type-checked

export 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 兼容文件,并把结果输出到终端。

验证配置是否生效可以从两个角度判断:

  1. 命令能正常跑完并输出检查报告,说明extends中的共享配置加载成功。
  2. 切换配置前后告警集合的变化符合各配置的定位:从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 文档 为准):

  • allstrictstrict-type-checked之外,其余配置都视为"stable":规则的增删属于 breaking change,只会在主版本升级时发生。
  • strictstrict-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),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/14 4:23:54

数学建模也能Agent化:多智能体协作全流程实战

我去年年底开始认真琢磨一件事:数学建模这个场景,能不能被Agent化。先说背景。我本职做算法工程,业余会帮学生辅导数学建模竞赛,也接一些企业里的小型建模咨询。前几年大家普遍的做法,是把ChatGPT当高级搜索引擎用——…

作者头像 李华
网站建设 2026/9/14 4:23:40

4F相关器系统Matlab仿真:从透镜傅里叶变换到相关峰定位

简介:基于透镜傅立叶变换特性的4F相关器系统的Matlab仿真项目,聚焦光学信息处理与傅立叶光学中的频谱分析,适用于光电、通信、自动化等专业学生完成毕业设计、课程设计或大作业,也可作为相关科研人员的入门参考。压缩包共12个文件…

作者头像 李华
网站建设 2026/9/14 4:23:25

MongoDB Stable API:API 版本兼容性规则与 IDL 兼容性检查机制全解

MongoDB Stable API:API 版本兼容性规则与 IDL 兼容性检查机制全解 【免费下载链接】mongo The MongoDB Database 项目地址: https://gitcode.com/GitHub_Trending/mo/mongo 本文围绕 MongoDB 官方文档 STABLE_API_README.md 展开,讲清楚 Stable …

作者头像 李华
网站建设 2026/9/14 4:22:43

ESPHome 30元一个下午搭好漏水检测报警

ESPHome 30元一个下午搭好漏水检测报警 【免费下载链接】esphome ESPHome is a system to control your ESP32, ESP8266, BK72xx, RP2040 by simple yet powerful configuration files and control them remotely through Home Automation systems. 项目地址: https://gitcod…

作者头像 李华
网站建设 2026/9/14 4:21:59

STM32嵌入式开发迁移到VS Code的工程化实践

1. 项目概述:为什么STM32开发者正在集体迁入VS Code最近三个月,我手头带的五个嵌入式项目里,有四个新启动的工程全部跳过了Keil MDK和IAR Embedded Workbench,直接在VS Code里完成了从新建工程、代码编写、调试烧录到量产固件生成…

作者头像 李华