TSSLint是由Johnson Chu开发的轻量级TypeScript代码检查工具。该工具已经发布了v3版本,这一新版本降低了依赖项的数量,优化了与旧版代码检查工具的迁移流程,并且Chu将此次发布称为该项目的“最终重大版本更新”。
TSSLint被定位为现已弃用的TSLint的继承者
。与ESLint这类需要作为独立进程运行、且经常需要重新初始化类型检查上下文的通用代码检查工具不同,TSSLint可以直接作为TypeScript语言服务器的插件来使用。由于它能够直接利用TypeScript的原生AST结构进行检测,而无需进行ESTree转换,因此它可以提供近乎即时的诊断结果和修复建议。这对于大型项目来说尤为有用,因为在这些项目中,编辑器在保存文件时自动进行代码修复所导致的延迟往往会严重影响开发效率。
v3版本中最显著的变化是去掉了用于运行时操作的esbuild依赖项。现在TSSLint直接利用Node.js对.ts文件的原生支持来进行构建,这使得构建过程更加简单,启动速度也得到了提升。不过,要使用这一功能,必须确保系统安装的是Node.js 22.6.0或更高版本。
此次发布还引入了一个名为TSL的兼容性层,该层由Arnaud Barre开发开发,用于统一处理TypeScript代码检查规则。原本作为@tsslint/compat-eslint包提供的这个功能现在被独立成一个新的包,其集成逻辑也进行了更新,以便能够与现有的ESLint生态系统顺利兼容。对于仍在使用旧版TSLint的团队来说,新添加的importTSLintRules功能可以让他们直接将TSLint的规则导入到TSSLint配置中,从而简化迁移流程。
一个新的createIgnorePluginAPI允许开发者自定义需要忽略的代码模式。
开发工具也得到了改进:tsslint-docgen这一新工具能够自动生成规则文档,同时defineRulesAPI对应的JSDoc文档也进行了更新。此外,CLI缓存现在被存储在操作系统的临时文件夹中,这样就不会导致缓存文件占用项目目录中的空间。
在迁移过程中,开发者需要注意一些可能会引发问题的变化:--projects CLI参数的名字已经改为,createDisableNextLinePlugin也被重新命名为createIgnorePlugin。而--threads选项则被完全移除了,因为团队通过测试发现,在Node.js的内存共享机制限制下,多线程处理虽然能让速度提高1.5倍,但会消耗大约两倍的系统资源。因此,团队计划在未来的版本中推出一种更加高效的多线程解决方案。
在X平台上宣布了这一版本的发布,Chu表示该工具变得更加轻量且运行速度更快,并提到它已经改用Node.js的原生功能来处理.ts文件的导入语句。Vue.js的创建者Evan You此前也曾称赞TSSLint是“在利用现有的TS语言服务器的同时运行类型检测规则的最有效工具”。
在同一条X论坛帖子里,有人提出了这样的问题:
很有意思,这个工具在TypeScript的Golang版本上也能使用吗?
Johnson Chu回答道:
目前还不能。社区之前已经尝试过开发类似tsgolint/oxlint/rslint这样的工具来解决这个问题。因此,除非我们能找到更好的解决方案,否则TSSLint不会重复这些工作。
与目前被广泛采用的TypeScript代码检查工具ESLint相比,TSSLint通过直接集成到TypeScript编译器API中来进行类型检测,这种方式避免了单独维护类型检查流程所带来的开销。像Biome和oxlint这样的新工具虽然通过原生实现大幅提升了检测速度,但它们主要关注语法错误检查,并不能提供与TSSLint相同深度的类型分析功能。
TSSLint与即将推出的TypeScript 7原生编译器typescript-go不兼容,因为后者不支持语言服务插件。
TSSLint是开源项目,目前可以在GitHub上找到它,截至本文撰写时,该项目已经获得了大约600个星标。