NX 和 NextJS monorepo 中的全局类型声明

luk*_*ine 19 typescript reactjs monorepo next.js nrwl-nx

我一直在网上寻找解决我的问题的好方法,但到目前为止我还没有。

我有一个带有 NextJS 的 NX monorepo,我正在尝试创建一个types/可供我的所有应用程序和库使用的全局文件夹。

我原以为这会很简单,我会在根目录中添加一个文件夹并将所有文件放在.d.ts那里。然后在 tsconfig.base.json 中我添加

"typeRoots": [
  "node_modules/@types",
  "node_modules/next/types",
  "types/"
]
Run Code Online (Sandbox Code Playgroud)

我希望事情就这么简单。

允许我在 monorepo 中的任何地方使用我的输入,而无需导入它们。

不幸的是,这不起作用。经过大量的混乱后,我确实设法让它工作,但前提是该types/文件夹位于应用程序内部,例如:

apps/
    /myApp/
          /types/            <- types here were detected
types/                       <- types here were not detected
tsconfig.base.json
Run Code Online (Sandbox Code Playgroud)

这对我来说没有好处,因为这意味着我必须在所有应用程序和库中复制我的类型。

NX 的官方建议是添加一个新的库来存储您的类型,然后导入它并在每个应用程序和库中使用它,但这对我来说真的很笨重。typeRoots另外,这并不真正适用于将其添加到tsbase.config.json 中的想法

如果有人知道更好的方法可以做到这一点,我很想听听。

干杯。

小智 12

现在正在与同样的问题作斗争。到目前为止,这适用于我的项目,但它仍然不是一个理想的解决方案。我更愿意有一个全球供应商。

apps/
    /myApp/
          tsconfig.app.json
types/                       <- add your .d.ts files here
tsconfig.base.json
Run Code Online (Sandbox Code Playgroud)

tsconfig.app.json每个应用程序的 中添加以下内容:

"include": ["../../types/**/*.d.ts"]
Run Code Online (Sandbox Code Playgroud)

这将导入存储在全局文件夹中的所有类型定义。但配置仍然需要在每个库和应用程序中手动处理。

让我知道这是否有帮助或者您是否找到了更好的解决方案。