打字稿和工作区/ monorepo

Def*_*mat 5 compilation typechecking typescript

我们正在尝试使用Typescript的monorepo方法(Yarn的工作空间).

例如,我们有两个库:@project/main@project/common.

每个库中的tsconfig.json如下所示:

{
  ...
  "baseUrl": "./"
}
Run Code Online (Sandbox Code Playgroud)

这允许我们在每个库中使用绝对导入.

现在假定,一个index.ts@项目/主库包含:

import { foo } from "@project/common";
Run Code Online (Sandbox Code Playgroud)

index.ts@项目/通用包含:

export * from "src/functions";
Run Code Online (Sandbox Code Playgroud)

@ project/main的类型检查/编译期间,Typescript将尝试在@ project/main/src/functions.ts中找到一个foo函数,而不是@ project/common/src/functions.ts

这是因为Typescript将正确地遵循"@ project/common"导入,然后,它将尝试遵循"src/functions"导出.然而,这种进口是绝对的,所以打字稿将使用的baseUrl,这是领导对"@计划/主".

为了解决这个问题,我们可以添加如下内容:

{
  "paths": {
    "*": [
      "*",
      "../../node_modules/@project/common/*"
    ]
  }
},
Run Code Online (Sandbox Code Playgroud)

到" @project/main"包的tsconfig.json.

这可以解决我们的问题,直到我们将一个functions.ts文件添加到主项目(@project/main/src/functions.ts).

现在,打字稿将使用functions.ts@项目/主,而不是@项目/常见,这显然是一个不被接受的行为.

所以,我的问题是:是否有可能配置一个打字稿使用的baseUrltsconfig.json,位于旁边与目前处理的文件或它的父目录?