使用 monorepos 中的引用进行 TypeScript tsc 类型检查

sww*_*ind 7 typescript tsc monorepo

我正在使用 Yarn Workspaces,并且我想要一个 cli 命令来检查位于 的源 ts 文件的类型packages/*

最初,我使用 webpack(使用 esbuild,它不检查类型)构建我的项目,并使用tsc --noEmit独立检查类型。他们合作得很好。

切换到 Yarn Workspaces 后,我将整个项目分成了几个小包。

整个项目是这样的:

packages/
  foo/
    index.ts          // import bar from 'bar'; console.log(bar);
    package.json      // { "name": "foo" }
    tsconfig.json     // { "references": [ { "path": "../bar" } ] }
  bar/
    index.ts          // export default "hello world";
    package.json      // { "name": "bar" }
    tsconfig.json     // { "compilerOptions": { "composite": true } }
package.json          // { "workspaces": [ "packages/*" ] }
Run Code Online (Sandbox Code Playgroud)

然后发现tsc运行失败。当我尝试时tsc --noEmit -p packages/foobar,它失败并出现一堆错误,例如:

Output file '/packages/foobar/index.d.ts' has not been built from source file '/packages/foobar/index.ts'.
Run Code Online (Sandbox Code Playgroud)

然而 webpack 工作得很好。

上网查了一下,官方文档告诉我这两个功能只能在build模式下使用。但是当我尝试时,tsc --noEmit -b packages/foobar由于--noEmit标志和构建模式之间的冲突,它也失败了。此外,如果我删除了--noEmit标志,tsc将尝试为我生成一堆.js文件,但我不希望生成它们。

我只想要一个 cli 命令来检查类型,而不像我的 IDE 那样输出任何额外的文件。怎样才能tsc正确运行呢?或者有什么替代方案吗?

put*_*uty 0

尝试将typescript依赖项添加到package.json要检查的包中。

(编辑):看起来也不适合tsc --noemit项目参考...