TSOA+TypeScript生成spec与路由时卡顿问题原因咨询
卡顿问题核心原因
该问题由 TypeScript 旧版本编译器的冗余校验逻辑,与 TSOA 3.x 版本类型解析的未优化逻辑共同导致:
- TypeScript 4.4.x 版本的编译器 API 处理泛型参数内的多行字符串字面量联合类型时,类型检查器会对每一行的独立联合成员触发重复的类型兼容性校验,校验次数随换行拆分的联合成员数量呈指数级上升,而非线性增长,这是耗时随拆分行数大幅飙升的核心原因。
- TSOA 3.14.0 版本的类型提取逻辑解析
Pick等内置工具泛型时,会递归遍历泛型参数的所有语法节点,换行、缩进这类非核心语法节点(语法 Trivia)会被识别为节点分隔标记,触发重复的全量类型提取操作,进一步放大了执行耗时。
可行解决方案
- 临时适配方案:将
Pick泛型内的联合类型字段全部写在同一行,避免触发多行遍历的冗余逻辑,该方案已通过测试验证有效:
export interface FindUser extends Pick<User, '_id' | 'name' | 'dateOfBirth' | 'height' | 'nationality' | 'citizenShip' | 'username' | 'link'> { id: string }
- 永久修复方案:将 TypeScript 升级至 4.8 及以上版本,同时将 TSOA 升级至 4.x 及以上版本,两个工具的新版本均已修复对应冗余遍历问题,后续将字段拆分换行也不会出现卡顿。
- 替代实现方案:放弃使用
Pick工具泛型,直接在FindUser接口内明确定义需要的所有字段,也可以绕开该问题。
内容的提问来源于stack exchange,提问作者Rúni Egholm Vørmadal
相关产品推荐
相关产品推荐

