You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何列出TypeScript项目中tsc编译时正在使用的所有类型包

问题背景对应的原理说明

你给出的代码是典型的Jest测试用例,其中describe、it都是Jest暴露的全局API,对应的类型定义存放在@types/jest中,默认会被TypeScript自动加载到全局作用域,和同样暴露了同名全局API的@types/mocha产生声明冲突,因此需要通过显式配置types限制全局加载的类型包。

compilerOption.types 核心工作规则
  • 默认未配置types字段时,所有node_modules/@types下的类型包都会被自动注入到全局类型作用域,代码可以直接使用对应包暴露的全局类型,不需要显式import。
  • 显式配置types数组后,只有数组中列出的@types包会被自动全局注入,其余@types包不会进入全局作用域,从根源避免同名全局声明的冲突。
  • types配置仅控制「自动全局注入的类型包」,完全不影响「模块导入时的类型解析」:只要你在代码中通过import引入了某个模块,TypeScript依然会自动查找该模块对应的类型定义(优先使用包自带的类型声明,没有就查找@types下的对应包),无论有没有在types数组中配置。
仅配置types: ['@types/jest']就能正常编译的原因

你package.json中其他@types/开头的包都不需要全局注入,比如@types/react、@types/lodash这类,都属于模块级类型,只有你通过import引入对应模块时才会被加载,类型绑定在模块作用域内不会污染全局,所以哪怕没有加到types数组里,TypeScript也会在你用到对应模块时自动加载匹配的类型定义,不会产生报错。
这也说明:只配置['@types/jest']不代表tsc没有用到其他@types包,只是其他包不需要全局注入而已。

列出tsc编译时实际用到的所有类型的方法
  • 方法1:使用tsc内置参数
    执行命令:
tsc --listFiles

该命令会输出编译过程加载的所有文件,包括所有.d.ts类型定义文件,你可以过滤路径中带有@types的条目,就能得到所有用到的@types类型包。Unix系统可以直接用tsc --listFiles | grep @types快速筛选。

  • 方法2:开启类型解析日志
    在tsconfig.json的compilerOptions中添加配置:
"traceResolution": true

重新执行tsc编译,控制台会输出完整的类型解析链路,包括每个类型文件的查找路径、加载原因,能精准定位所有被加载的类型定义。

  • 方法3:通过TS API自定义查询
    如果需要程序化获取加载的类型列表,可以使用TypeScript官方提供的API,创建编译程序后遍历program.getSourceFiles(),筛选出所有类型定义文件即可。

内容的提问来源于stack exchange,提问作者Shekhar Joshi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 01:36:02