解读:从 8.70.0 到 v1.0.0 的完整演进路线)
typescript-eslint 官方变更日志CHANGELOG解读从 8.70.0 到 v1.0.0 的完整演进路线【免费下载链接】typescript-eslint:sparkles: Monorepo for all the tooling which enables ESLint to support TypeScript项目地址: https://gitcode.com/GitHub_Trending/ty/typescript-eslint本文是一篇以 typescript-eslint 仓库根目录 CHANGELOG.md 为绝对主体的技术导读。全文完整继承该文件 234 个版本小节的骨架与要点梳理 v8 → v7 → v6 → v5 → v4 → v3 → v2 → v1 的演进脉络并对照仓库源码、配置与文档交叉印证。读完本文你将理解 typescript-eslint 每个大版本的核心变化、破坏性变更的判定标准、monorepo 各包间的协作关系以及如何借助 CHANGELOG 制定升级与降级策略。一、CHANGELOG 概览6571 行、234 个版本的真实数据仓库根目录的 CHANGELOG.md 是一份自动生成的、按时间倒序排列的发布记录全文共 6571 行记录了自 2019 年 1 月 20 日v1.0.0至 2026 年 9 月 7 日8.70.0的全部版本。统计结果如下来自该文件自身的章节标题统计项数值总行数6571版本小节总数^##/^#标题234最早版本1.0.0 (2019-01-20)最新版本8.70.0 (2026-09-07)大版本1.0 → 2.0 → 3.0 → 4.0 → 5.0 → 6.0 → 7.0 → 8.01.1 每个版本小节的固定结构除少数大版本外每个小节遵循统一的模板本文将其归纳为如下五段式结构版本标题形如## 8.70.0 (2026-09-07)标注发布日期 Features新功能例如 8.70.0 新增no-generated-empty-object-type规则与网站社交预览卡片 Fixes缺陷修复例如 8.70.0 对member-ordering、no-unnecessary-condition、no-deprecated等规则的修复❤️ Thank You贡献者名单含 AI 助手署名如 8.68.0 小节中的Claude Opus 5、Cursor cursoragent收尾链接指向 GitHub Releases 与版本策略/发布说明文档。1.2 旧版v6 之前的格式差异v6 及更早版本6.17.0 之前的标题格式为# 6.17.0 (日期)且分类名使用### Bug Fixes/### Features而不是 v7/v8 的### Fixes。例如 6.14.0 使用了### Bug Fixes与### Features的经典格式。格式的切换发生在 6.17.02024-01-01之后、7.0.02024-02-12之前即从 v7 系列开始全面采用 emoji 化的分类标题。1.3 两个特殊的非标题大版本7.0.0 与 8.0.0在 v6 与 v7 系列之间存在两个使用#单井号但不带版本号链接的大版本标题8.0.0 (2024-07-31)仅有一条指向官网公告的迁移指南引用正文是完整的 Breaking Changes / Features / Fixes 列表7.0.0 (2024-02-12)结构与 8.0.0 类似且其中 Breaking Changes 被嵌入 Features 列表内标注 ⚠️。这两个小节是全文最重要的内容载体也是本文第四、五章深度讲解的对象。二、版本与发布策略为什么所有包共用一个版本号CHANGELOG 末尾反复出现的versioning strategy与releases链接对应的正是仓库内 docs/users/Versioning.mdx 一文。结合 CHANGELOG 的发布记录可以确认以下事实2.1 语义化版本与统一版本号该项目遵循 semver并且所有包以相同版本号同时发布。这一点从 CHANGELOG 中可以得到直接印证例如 8.70.0 一节同时涵盖eslint-plugin、project-service、typescript-estree、website等多个包的变更而非每个包单独记录版本。这种一把梭策略简化了 monorepo 各包之间的依赖协调——eslint-plugin、parser、typescript-estree之间用同一个版本号配对用户在安装时不需要手动对齐版本矩阵。2.2 破坏性变更的判定标准与 CHANGELOG 中的 ⚠️ 条目互证Versioning.mdx 将破坏性变更按包分组给出了明确清单这些标准在 CHANGELOG 中都有对应实例包视为破坏性变更的行为CHANGELOG 对应实例ast-spec/visitor-keys删除/重命名 AST 节点或属性、非细化地改类型8.0.0 中split TSMappedType typeParameter into constraint and keyCHANGELOG.md#L2271eslint-plugin删除/重命名规则或选项、改默认值、变更 recommended 配置8.0.0 中remove formatting/layout rulesCHANGELOG.md#L2276、replace ban-types with no-restricted-types, no-unsafe-function-type, no-wrapper-object-typesCHANGELOG.md#L2287parser/typescript-estree/scope-manager/types/type-utils/utils以不兼容方式增删 API8.0.0 中remove slow deprecated and isolated programsCHANGELOG.md#L2277值得注意的是新增规则、新增可选参数、新增输出属性、JSDoc 注释均不视为破坏性变更因此 CHANGELOG 中大量add ... rule条目只出现在 Features 而非 Breaking Changes 中。2.3 版本发布节奏从 CHANGELOG 的日期可以观察到稳定的周更节奏v8 系列约每周发布一个 minor 版本如 8.64.0 于 2026-07-13、8.65.0 于 2026-07-20、8.66.0 于 2026-08-03每年年中6-7 月推出一个大版本。三、monorepo 结构CHANGELOG 中各包名对应的仓库目录CHANGELOG 每一条目都带有**包名:**前缀这些包名可以直接映射到仓库packages/目录下的同名文件夹。这是阅读 CHANGELOG 时最重要的索引能力CHANGELOG 前缀仓库目录职责eslint-pluginpackages/eslint-plugin全部 150 个 ESLint 规则实现packages/eslint-plugin/src/rulestypescript-estreepackages/typescript-estreeTypeScript → ESTree 的 AST 转换器packages/typescript-estree/src/convert.tsparserpackages/parser供 ESLint 消费的解析器入口packages/parser/src/parser.tsscope-managerpackages/scope-manager作用域与变量引用分析type-utilspackages/type-utils类型感知规则的工具函数utilspackages/utils规则开发公共工具ast-specpackages/ast-specAST 类型规范定义project-servicepackages/project-service基于 TypeScript Project Service 的解析加速rule-testerpackages/rule-tester规则测试框架typescript-eslintpackages/typescript-eslint统一入口包tseslint导出配置助手与 globswebsitepackages/website官方文档站与 Playground举例说明映射的实用价值若你在 CHANGELOG 中看到typescript-estree: handle import.defer() as ImportExpression8.66.0即可定位到 packages/typescript-estree/src/convert.ts 查看ImportExpression的实际转换逻辑若看到scope-manager: export ClassStaticBlockScope8.63.0可到 packages/scope-manager/src/scope 目录查看对应的 Scope 类实现。四、深度解读 v8从 8.0.0 到 8.70.0 的现代体系4.1 v8.0.02024-07-31核心破坏性变更8.0.0 小节是全文信息密度最高的一节其 Breaking Changes 完整清单可归纳为六条主线AST 规范化TSMappedType的typeParameter被拆分为constraint与key两个字段新增TSEnumBody节点承载TSEnumDeclaration的 body移除AST_NODE_TYPES.Import遗留类型见 v5 部分 的铺垫ast-spec删除废弃的类型参数。解析器行为收紧parser 默认总是开启comment/loc/range/tokens移除缓慢且已废弃的 isolated programs旧版按单文件隔离解析的加速路径被 projectService 替代EXPERIMENTAL_useSourceOfProjectReferenceRedirect与EXPERIMENTAL_useProjectService被移除/正式化为projectService。配置与 globsparserOptions.project默认启用 dot globs.开头的文件纳入匹配allowDefaultProjectForFiles更名为allowDefaultProjectCHANGELOG.md#L2318 中明确bring back in allowdefaultprojectforfiles rename新增disallowAutomaticSingleRunInference。规则体系重构移除格式化/布局类规则对齐 ESLint 官方格式交给 Prettier的立场ban-types被替换为no-restricted-types、no-unsafe-function-type、no-wrapper-object-types三规则no-empty-object-type从ban-types与no-empty-interfaces中拆分独立删除no-useless-template-literals、no-loss-of-precision、no-throw-literal等废弃规则。ESLint 9 对齐utils包的 ESLint 导出从LegacyESLint换成FlatESLintno-unused-vars的 catch 子句行为对齐 ESLint 9rule-tester全面切换到 flat configswitched to flat config。选项默认值变更prefer-nullish-coalescing的ignoreConditionalTests默认值改为trueno-floating-promises默认关闭checkThenables。同时 v8 引入了几项重要 Feature非类型感知 lint 借助 projectService 大幅提速speed up non-type-aware linting with project service、no-unused-vars新增reportUnusedIgnorePattern与ignoreClassWithStaticInitBlock选项、return-await加入strict-type-checked预设、rule-tester支持 multipass fixes、type-utils的TypeOrValueSpecifier支持交叉类型。4.2 v8 系列的演进趋势规则语义精细化与工程基建从 8.63.0 到 8.70.0v8 小版本的主题可以归纳为修复误报、语义细化、响应 TypeScript 新语法TypeScript 新语法支持8.64.0 支持解析import defer并配套在 8.65.0 抛出非法语法错误8.66.0 将import.defer()映射为ImportExpression节点8.65.0 在检测到 TS 7 时给出警告parser 新增onUnsupportedTypeScriptVersion选项以在遇到不支持的 TS 版本时报错。类型感知规则的精确化8.68.0 修复no-unnecessary-type-assertion在递归类型下的栈溢出、8.69.0 的no-misused-promises新增flagUnions选项、8.70.0 修复no-unnecessary-condition在嵌套逻辑表达式 RHS 上的误报。新规则与规则形态演进8.69.0 引入strict-void-return的修复建议8.70.0 新增no-generated-empty-object-type规则源自对any类型生成结果的检查member-ordering、unified-signatures、no-deprecated等规则持续得到行为修正。4.3 v8 工程侧pnpm 与 Docusaurus8.70.0 的两条 Fixes 明确写着use stable release of pnpm 12与update pnpm to 12.3.4CHANGELOG.md#L10-L11印证仓库根目录 pnpm-workspace.yaml 与 pnpm-lock.yaml 所代表的 pnpm workspace 工程形态8.70.0 同时将website更新为按页面生成社交预览卡片说明文档站packages/website是 v8 迭代中持续投入的一部分。五、v72024-02-12扁平配置时代的开端7.0.0 小节的体量远小于 8.0.0核心只有两条破坏性变更但分量极重提升 ESLint / Node.js / TypeScript 的最低版本要求标注 ⚠️这是 v7 唯一的 Breaking Change意味着旧环境下的用户必须先升级工具链才能安装 v7支持 flat config这是 v7 最重要的功能增量。当前仓库中根目录 eslint.config.mjs 正是 flat config 的实际使用样例而 packages/typescript-eslint/src/config-helper.ts 的config()助手与 packages/typescript-eslint/src/configs 下的预设recommended、strict、strict-type-checked等共同构成了 flat config 下的推荐用法。v7 系列的后续版本延续了规则的增量演进7.17.0 将no-unsafe-function-type、no-wrapper-object-types从 v8 反向移植回 v77.18.0 更新types包的 ECMA 版本。值得注意的是7.18.0 与 8.0.0 的发布时间仅相差 3 天2024-07-29 vs 2024-07-31说明 v7 在 v8 发布前进入了收尾维护期两个大版本之间存在明显的交接窗口。六、v6 与更早版本从 6.17.0 回溯到 6.0.0v6 系列记录于 6.0.0 (2023-07-10) 至 6.17.0 (2024-01-01)。6.0.0 之前的版本格式仍是# x.y.z (日期)且使用### Bug Fixes/### Features分类这些差异在阅读时需要注意。v6 时期的代表性变化包括6.21.0 支持parserOptions.project: false关闭类型信息加载、导出插件元数据6.17.0 起改用新格式。v6 系列的完整演进还体现在其 Breaking Changes 段——位于 6.0.0 一节其内部包含### BREAKING CHANGES子段全文件共出现 5 次该标记分别位于 v6.0.0、v5.x 的 L3677、v4.x 的 L4817、v3.x 的 L5443 附近及 L6276。七、版本演进时间线与大版本断代将 CHANGELOG 中各大版本的首版日期汇总如下来自各版本标题大版本首版日期时代特征1.0.02019-01-20项目奠基规则以 Bug Fixes 迭代为主2.0.02019-08-13移除导出 parser、引入 EXPERIMENTAL 特性3.x2020 年类型系统与 TS 版本支持范围收紧4.x2021 年BREAKING CHANGES 段中出现AST_NODE_TYPES.Import移除等 AST 清理5.0.02022 年recommended 配置变更视为破坏性L62766.0.02023-07-10引入默认规则选项变更等破坏性调整7.0.02024-02-12提升最低版本要求、支持 flat config8.0.02024-07-31AST 规范化、规则体系重构、ESLint 9 对齐、projectService 正式化从整体趋势看v1→v5 时期 CHANGELOG 以Bug Fixes为主当时规则数量快速增长v6→v7 是配置体系变革期flat config 落地v8 是重新筑基期——大量历史负担格式化规则、旧 API、experimental 选项被一次性清理为持续的小步快跑每周 minor 版本腾出空间。八、如何用这份 CHANGELOG 指导实际开发8.1 升级路径自查清单基于 8.0.0 的 Breaking Changes从 v7 升级到 v8 时应逐项核对AST 消费者若你写了自定义规则并访问TSMappedType.typeParameter需改为分别读取constraint与key若访问TSEnumDeclaration.body注意其类型已变为新的TSEnumBody节点对应仓库 packages/ast-spec/src/element/TSEnumMember 与 packages/ast-spec/src/special/TSEnumBody。解析器配置将parserOptions.project的 dot 文件显式排除行为改为依赖默认启用的 dot globs若使用了EXPERIMENTAL_useProjectService改名为projectService。规则迁移ban-types→no-restricted-types等三规则no-empty-interface→no-empty-object-type。ESLint 版本确认使用的 ESLint 版本与utils包中FlatESLint导出兼容v7 起已支持 flat configv8 起全面以 flat 为默认形态。8.2 将 CHANGELOG 作为规则的活文档CHANGELOG 中每条规则修复都可以在 packages/eslint-plugin/src/rules 与 packages/eslint-plugin/tests/rules 中找到对应实现与测试。例如 8.70.0 新增的no-generated-empty-object-type规则对应 packages/eslint-plugin/src/rules/no-generated-empty-object-type.ts其行为、消息模板与配置 schema 均可从该文件及配套测试中得到完整验证。以这种方式阅读 CHANGELOG可以把它变成一张源码地图。8.3 多包协同开发视角v8 系列的大量 Fixes 横跨eslint-plugin、typescript-estree、parser、project-service、scope-manager、rule-tester、type-utils、website等包这说明任何一条规则的修复都可能涉及解析器AST 形态、作用域分析引用判定、类型工具类型信息获取三层联动。在阅读 CHANGELOG 时建议把跨包的条目当作架构边界变更信号来对待——例如 8.66.0 的import.defer()支持同时出现在typescript-estree与parser两个前缀下说明这是一次贯穿解析链路的语法能力升级。九、与其他仓库文档的对照阅读CHANGELOG 是发布事实的结果层若要理解原因层建议与以下仓库内文档对照docs/users/Versioning.mdx破坏性变更判定的完整规则是解读 CHANGELOG 中 ⚠️ 条目的官方依据docs/users/Releases.mdx发布流程与节奏说明docs/packages/Packages.mdxmonorepo 各包职责总览帮助将 CHANGELOG 前缀映射到代码目录docs/getting-started/Typed_Linting.mdx类型感知 linting 的配置说明对应 CHANGELOG 中大量类型相关规则条目各大版本的博客公告如announcing-typescript-eslint-v8仓库内可见于 packages/website/blog 目录提供比 CHANGELOG 更详细的迁移案例。十、结语一份优秀的 CHANGELOG 不只是版本流水账而是一部可检索、可验证的项目编年史。typescript-eslint 的这份 6571 行文档完整记录了项目从 2019 年初的 1.0.0 到 2026 年 8.70.0 的全部技术决策它用统一的版本号管理 15 个相互依赖的包用明确的标准判定破坏性变更用周更节奏维持高速迭代并在 v8 完成了一次彻底的现代化清算。无论你是规则开发者、迁移者还是架构评审者都可以把本文介绍的版本脉络 包名映射 破坏性变更清单 源码对照四步法作为阅读与使用这份 CHANGELOG 的持久方法论。【免费下载链接】typescript-eslint:sparkles: Monorepo for all the tooling which enables ESLint to support TypeScript项目地址: https://gitcode.com/GitHub_Trending/ty/typescript-eslint创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考