问题描述
我有两个项目:app
和 lib
。 app
取决于 lib
。
app
是一个严格的 Typescript 项目,lib
不工作与严格。
我使用 Typescript 项目参考将它们连接在一起:
"compilerOptions": {
"strict": true,},"references": [
{ "path": "./apps/app" },{ "path": "./libs/lib/" }
]
"extends": "../../tsconfig.json","references": [
{
"path": "../../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 缺少依赖项。
但更重要的是,我可以看出您没有花太多时间阅读 Project References 的工作原理,也没有阅读太多 project references 页面。所以我犹豫是否只为你做你的工作并给你最终的答案。相反,我会给你一个你不理解的东西的清单,提示你做错了什么。
这些是您弄错的 tsconfig
设置:
composite
rootDir
include
files
您的三个 tsconfig
中的每一个都至少有一个错误。
修复这些问题,tsc -b .
、tsc -b apps/app
和 tsc -b libs/lib
都会按预期工作。
如果您取得了进展,但仍然感到困惑或卡住,那么我会提供帮助。更新示例存储库和您的问题,并表明您已尝试过。