👍 超越 ESLint,Oxc 优先采用 TypeScript 7,Rust 和 Go 梦幻联动!

👇 今日要闻

打破信息壁垒,走近全球前端。Hello 大家好,我是林语冰。

最近,TS 团队官宣 TypeScript 7 正式首发,这是 TypeScript 的第 7 个主版本,更是基于 Go 语言移植的第 1 个主版本。

与此同时,尤雨溪的团队也加入了 TypeScript 7 的先锋行列,Vite 和 Rolldown 底层依赖的 Oxc 编译器就是其一。

Oxc 主席官宣,Oxc 全家桶的代码质检工具 Oxlint,即 ESLint 的 Rust 移植替代品,现在正式采用 tsgolint,用于 类型感知规则 的代码质检。

本期我们就来看一下 Oxlint + tsgolint 这种 Rust + Go 的原生语言梦幻联动,如何对 ESLint 等传统 JS 工具降维打击?

👉 类型感知规则

你可能会有点困惑,代码质检不是直接通过 ESLint 或 Oxlint 静态分析就能检查不合规的语法吗,为什么还要 TypeScript 介入呢?

这是因为代码质检范畴有一种 类型感知规则,它们无法通过 ESLint 提供的 AST(抽象语法树)直接实现。

类型感知规则需要 TypeScript 辅助支持,依赖静态类型系统提供更多的类型信息。

举个栗子,在 if 条件分支中误用 Promise 就是一种常见的反模式:

这里,如果你忘记使用 await,那么 if 条件就始终是一个 Promise 对象,隐式转换结果恒等于 true

对此,我们可以集成 no-misused-promises 规则来提供代码质保,但这条规则既需要 ESLint 提供 AST 信息,也需要 TypeScript 提供静态类型信息,所以它属于 类型感知规则

以前,类型感知规则一般采用 ESLint + typescript-eslint 组合来实现,但它们主要基于 JS 和 TS 这两种脚本语言,性能一般。

随着 Rust 移植的 Oxlint 日益成熟,以及 Go 驱动的 TypeScript 7 正式发布,尤雨溪团队希望充分榨干原生语言的性能优势。

因此,Oxc 全家桶继续推出了 tsgolint 类型感知引擎,辅助 Oxlint 支持类型感知规则。

👉 tsgolint 基本用法

在 Oxc 生态中,代码质检现在依赖两个原生语言工具:

  • Oxlint:ESLint 的 Rust 移植替代品,它负责处理遍历文件和配置,支持非类型感知规则,提供代码质检报告
  • tsgolint:Go 和 TypeScript 7 驱动的类型感知代码质检引擎,它负责构建和执行类型感知规则,将类型信息提供给 Oxlint

⚠️ 注意,tsgolint 直接基于 TypeScript 7 构建,所以要求你的项目中 TypeScript 版本至少为 v7。

然后,我们需要安装这两个开发依赖:

环境准备和依赖安装完毕后,tsgolint 支持两种使用方式,一种是通过 CLI 命令行终端界面:

另外一种方式是通过 Oxlint 的 根配置文件 启用:

⚠️ 注意,第一种 CLI 方式的优先级更高,即使你在第二种根配置文件中设置 typeAware: false 禁用 tsgolint,运行 oxlint --type-aware 命令也会执行类型感知规则。

此外,第二种配置文件方式要求必须在 .oxlintrc.jsonoxlint.config.tsOxlint 根配置文件 中设置,嵌套配置文件中不应该设置这些字段。

配置完毕后,你就可以按需自定义类型感知规则了,配置方式和 Oxlint 其他规则一样,同时支持和 typescript-eslint 相同的额外选项。

举个栗子,以下是若干类型感知规则的自定义示例:

这样,你的项目就能享受 ESLint + typescript-eslint 同款代码质检,同时通过 Oxlint + tsgolint 获得 Rust + Go 原生语言赋予的极致性能。

👉 更多信息

tsgolint 在之前的 Alpha 阿尔法阶段就提供了 43 条类型感知规则,而现在新增了 16 条规则,目前已经支持 69 条规则,只比 typescript-eslint 少了 2 条规则,后续版本大概会百分百兼容。

此外,tsgolint 的兼容性与 TypeScript 特定版本强相关,所以通过版本号来对应:

md 复制代码
v7.0.2000
^^^^^^ TS 版本号
^^^ tsgolint 版本号

这里,v7.0.2000 由 TypeScript 版本号和 tsgolint 的修订号共同组成,前几位用于对齐 TypeScript 特定版本,后几位是 tsgolint 的修订号,比如 tsgolint 的下个补丁版本是 v7.0.2001

之后,如果 TS 版本更新,那么 tsgolint 的前几位版本号也会同步更新,同时归零后面的修订号。

另一个更强大的功能是,Oxlint 现在支持报告每个规则的执行时间,包括原生规则和类型感知规则。

使用 --debug timings 可以找到最耗时的规则,在终端中可视化规则的耗时跑分。

这里我们使用 Markdown 表格方便展示:

规则 耗时(ms) 调用次数 来源
typescript/unbound-method 108.620 12450 type-aware
eslint/no-unused-vars 2.187 372 native
vitest/expect-expect 0.951 4682 native
oxc/no-map-spread 0.383 12545 native

这里,native 原生规则在 Oxlint 内部运行,而 type-aware 类型感知规则由 tsgolint 运行。

除了功能的完善,tsgolint 的性能也不可小觑,以 VSCode 等三个大型开源项目的性能跑分为例:

源码仓库 ESLint tsgolint 跑分
vscode 83.2s 6.96s 12x
typescript 27.2s 1.94s 14x
vuejs 12.3s 0.95s 13x

由表可得,tsgolint 的速度保守估计比 ESLint + typescript-eslint 快至少 10+ 倍。

👇 重点总结

尤雨溪团队的 Oxc 全家桶再添新工具,Oxc 主席官宣,Oxlint 采用 tsgolint 作为类型感知引擎,全面支持类型感知规则的代码质检。

tsgolint 基于 Go 驱动的 TypeScript 7 实现,现在 Oxlint + tsgolint 将取代 ESLint + typescript-eslint,而且性能暴涨 10 倍以上。

👍 以上就是本期《前端日报》的全部内容了,如果读完对你有所帮助,可以按赞打卡、在看推荐或转发分享。

🙏 已经关注我的粉丝们,我们下期再见啦,掰掰~~

👇 参考文献:

相关推荐
樊小肆2 小时前
# 你还在等DeepSeek官方 agent Harness‌? 来试试 DeepSeeker-Code吧
前端·人工智能·后端
樊小肆2 小时前
2568 万 token 才花 2 块 2:聊聊 DeepSeeker-Code 怎么吃满上下文缓存
前端·人工智能·后端
JarvanMo2 小时前
Flutter 3.47: material/cupertino终于解耦了
前端
郭邯2 小时前
一次「字符洁癖」引发的思考:我用 AI 写了个全角半角转换工具
前端
想要成为糕糕手2 小时前
🚀 在浏览器里跑 DeepSeek-R1?WebGPU 端侧推理实战(五)—— 中断、重置、缓存与流式生成
前端·react.js·llm
GuWenyue2 小时前
后端接口又双叒没写好?3 步搭建前端 Mock,从此告别"傻等后端"
前端·mocha
海兰3 小时前
【数据采集】开源的 Web 数据采集与处理Firecrawl(一)
前端·开源
vivo互联网技术3 小时前
从一键检测到 AI 修复:我们如何把无障碍检查做进研发流程
前端·人工智能
liuxiaocheng3 小时前
聊聊 Vercel AI SDK 的流式协议:前后端到底是怎么"边想边说"的
前端·后端