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

TypeScript子tsconfig继承根配置时无法正确识别根目录下的types.d.ts文件

TypeScript子tsconfig继承根配置时无法正确识别根目录下的types.d.ts文件

我太懂这种闹心的情况了——本来想用父tsconfig统一配置减少重复,结果偏偏在types.d.ts的路径上掉坑!咱们先拆解下问题根源,再给你几个不用重复配置的解决方案:

问题根源

TypeScript在处理子tsconfig继承的types数组时,对相对路径的解析逻辑和baseUrl、paths不一样:

  • 像baseUrl这类配置,子tsconfig继承后会自动基于自身所在目录调整基准路径
  • 但types数组里的相对路径(比如你根配置里的./types.d.ts),会被直接当成相对于子tsconfig所在目录的路径来解析,不会自动转换为相对于根目录的路径,这就是为什么你在ui目录下跑bun tsc --showConfig时,看到的还是./types.d.ts(对应ui目录下的位置,而不是根目录)

不用重复配置的解决方案

方案1:用基于baseUrl的绝对路径(推荐)

这个方案完美符合你不想重复配置的需求:

  1. 确保根tsconfig的baseUrl设置为./(指向根目录),如果还没加的话:
    {
      "compilerOptions": {
        "baseUrl": "./",
        // 其他配置...
      }
    }
    
  2. 把根tsconfig里的types数组修改为非相对路径的形式:
    "types": ["bun-types", "types"]
    
    原理是:当types数组里用的是非相对路径时,TypeScript会基于baseUrl指定的目录(根目录)去寻找对应的types.d.ts文件,子tsconfig继承这个配置后,会自动沿用这个解析逻辑,不会再按相对路径去子目录找。

方案2:用typeRoots自动扫描根目录的.d.ts文件

如果你的根目录下只有types.d.ts这一个自定义类型文件,或者想让TypeScript自动扫描根目录下所有自定义类型文件,可以试试这个:
在根tsconfig里设置typeRoots,替代原来的types数组:

"compilerOptions": {
  "typeRoots": ["./node_modules/@types", "./"],
  // 其他配置...
}

这样TypeScript会自动扫描./node_modules/@types(默认的类型目录)和根目录下的所有.d.ts文件,子tsconfig继承后也会沿用这个扫描规则,不用单独指定types数组。

方案3:临时应急的覆盖配置(不推荐,除非前两个不适用)

如果上面两个方案都不符合你的场景,那可以在子tsconfig里只覆盖types数组,把路径改成相对于子目录的正确路径:

{
  "extends": "../tsconfig.json",
  "compilerOptions": {
    "types": ["bun-types", "../types.d.ts"]
  }
}

不过这个确实有点违背DRY原则,只能作为临时方案。

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.08 08:10:29