457 - 《isolatedDeclarations》
发布于 2024年7月17日
1、先说背景。
如果我们用 TypeScript 开发库,会需要通过 .d.ts 类型声明文件来描述库的接口,这部分可以手写,更通用的是加 --declaration
让 tsc 自动生成。
// util.ts
export let one = "1";
export let two = "2";
// add.ts
import { one, two } from "./util";
export function add() { return one + two; }
而生成 .d.ts 最大的问题就是慢。慢的原因是多方面的,1)类型需要从其他文件推理,这意味着通常需要分析整个项目,2)这个推断是有依赖的,所以不能并发,不能充分利用多核,3)tsc 基于 JavaScript 实现,语言的速度有上限。swc 作者 kdy 曾尝试开发过 stc 用 rust 解此问题最终放弃,rollup 和 svelte 作者 Rich-Harris 也曾有其他思路的解 dts-buddy。
2、那如何解这个问题?TypeScript 官方的方案是 isolatedDeclarations(独立的声明文件),是 TypeScript 5.5 新推出的一个特性。加 --isolatedDeclarations
选项后,tsc 会要求你在 export 接口里加类型声明,不加报错。
export function foo() {
// ~~~
// error! Function must have an explicit
// return type annotation