为什么 Typescript 项目引用使用父 tsconfig 文件而不是引用自己的 tsconfig 文件?



我有两个项目:applibapp取决于lib.

app是一个严格的 Typescript 项目,lib不适用于 strict。

我使用打字稿项目参考将它们连接在一起:

./tsconfig.json

"compilerOptions": {
"strict": true,
},
"references": [
{ "path": "./apps/app" },
{ "path": "./libs/lib/" }
]

./apps/app/tsconfig.json

"extends": "../../tsconfig.json",
"references": [
{
"path": "../../libs/lib/tsconfig.json"
}
]

./libs/lib/tsconfig.json

"extends": "../../tsconfig.json",
"compilerOptions": {
"composite": true,
"strict": false
},

但是当我运行app时,我遇到了失败lib因为代码的运行就好像严格是真的一样:

TSError: ⨯ Unable to compile TypeScript:
../../libs/lib/src/index.ts:4:3 - error TS2564: Property 'uninitializedProperty' has no initializer and is not definitely assigned in the constructor.

但是lib将严格指定为假!如果只是禁用严格,它可以正常工作。如何配置 Typescript,以便项目实际上是独立的,并且每个项目中的代码使用自己的 tsconfig 选项?

我在这里准备了一个示例存储库:https://github.com/gaggle/monorepo-tsconfig-experiment。欢迎任何想法和建议!


只是为了给我的问题一些上下文:我想将多个项目移动到单个 monorepo 中,但并非所有代码都可以使用相同的编译器选项。"严格"差异就是一个例子,我不能只修复代码,以便它都使用相同的选项。

我让你的示例存储库很容易构建 - 我遇到的唯一麻烦是它不完整,这告诉我你实际上并没有尝试构建它。Project.json 缺少依赖项。

但更重要的是,我可以说你没有花太多时间阅读项目参考是如何工作的,没有阅读太多的项目参考页面。所以我犹豫是否只是为你做工作并给你最终答案。相反,我会给你一个你不理解的事情的清单,提示你做错了什么。

这些是您出错tsconfig设置:

  • composite
  • rootDir
  • include
  • files

你的三个tsconfig中的每一个都至少有一件事是错误的。

修复这些问题并tsc -b .tsc -b apps/apptsc -b libs/lib都将按预期工作。

如果你取得了进步,但仍然感到困惑或卡住,那么我会提供帮助。更新示例存储库和你的问题,并显示你已尝试。

最新更新