在Monorepo中添加Angular时,Typescript构建失败(Jasmine和Jest类型冲突) 主旨

在Monorepo中添加Angular时,Typescript构建失败(Jasmine和Jest类型冲突) 主旨,angular,typescript,jasmine,jestjs,monorepo,Angular,Typescript,Jasmine,Jestjs,Monorepo,我有一个Monorepo,只有Typescript包。当我运行tsc--build时,所有包都将编译成Javascript。在我添加了一个包含Angular应用程序的包之前,这一切都很好 为了测试我的软件包,我使用了Jest。但是我用茉莉花 问题 现在运行tsc--build时,Jasmine和Jest的类型似乎发生了冲突。 我总共得到184个错误。源于node_modules/@types/jest和node_modules/@types/jasmine以及我自己的软件包: 错误 我只显示了错

我有一个Monorepo,只有Typescript包。当我运行
tsc--build
时,所有包都将编译成Javascript。在我添加了一个包含Angular应用程序的包之前,这一切都很好

为了测试我的软件包,我使用了Jest。但是我用茉莉花

问题 现在运行
tsc--build
时,Jasmine和Jest的类型似乎发生了冲突。

我总共得到184个错误。源于
node_modules/@types/jest
node_modules/@types/jasmine
以及我自己的软件包:

错误 我只显示了错误日志中的几个片段,因为粘贴整个内容太长了。您可以在此处找到完整的错误日志:

开玩笑 node_modules/@types/jest/index.d.ts:1310:9-错误TS2717:后续属性声明必须具有相同的类型。属性“message”的类型必须为“string”,但此处的类型为“string |(()=>string)”

茉莉花

node_modules/@types/jasmine/ts3.1/index.d.ts:304:9
    304         message?: string;
                ~~~~~~~
    'message' was also declared here.
我自己的套餐

services/gateway/src/gateway.server.ts:7:24 - error TS2307: Cannot find module '@cents-ideas/utils'.

7 import { Logger } from '@cents-ideas/utils';
                         ~~~~~~~~~~~~~~~~~~~~
解决方案 当我从Angular项目的列表中删除Jasmine类型时,一切编译都没有错误。这就是为什么我确信是他们造成了这些错误。但我需要这些软件包来进行角度测试

"devDependencies": {
    // no errors when I remove those 2 packages
    "@types/jasmine": "~3.3.8",
    "@types/jasminewd2": "~2.0.3",
    // ...
  }
源代码 正如我已经提到的,我在Monorepo内部运营。如果您需要进一步了解,以下是源代码:

  • (导致错误的原因)

    • 我也遇到了这个问题,我可以想出三种可能的方法:

    • 不要在你的角度项目中使用茉莉花
    • 使用-skipLibCheck tsc标志
    • 使用类型根
    • 不要在你的角度项目中使用茉莉花。 由于您似乎正在启动一个新的Angular项目,并且实际上还没有编写任何基于Jasmine的Angular测试,因此您也可以在该项目中使用Jest。如果Angular项目中已经有Jasmine测试,那么迁移也很容易

      使用-skipLibCheck tsc标志 这将阻止对库类型文件进行类型检查。但是,有些错误现在可能未被检测到,并可能在运行时击中您()

      使用类型根 使用,您可以专门提取和修复相应.d.ts声明中的冲突

      您需要的是以某种方式“打破”两个声明之间的联系。因此,可以考虑创建一个新的文件夹:“重写”,并添加“重写\ jest\index .dts”作为你想做的事情。然后更新tsconfig.json以包含“typeroot”:[“\overrides”,“\node”_modules@types"]. 它告诉编译器首先在“\overrides\jest”中查找类型,如果没有找到,则在“\node”中查找类型_modules@types\开玩笑“`


      但是,您现在必须维护基本上是类型定义文件的本地分支。如果可以的话,您应该将该修复上传到您认为应该修复的库中。

      我也遇到了这个问题,我可以想出三种可能的方法:

    • 不要在你的角度项目中使用茉莉花
    • 使用-skipLibCheck tsc标志
    • 使用类型根
    • 不要在你的角度项目中使用茉莉花。 由于您似乎正在启动一个新的Angular项目,并且实际上还没有编写任何基于Jasmine的Angular测试,因此您也可以在该项目中使用Jest。如果Angular项目中已经有Jasmine测试,那么迁移也很容易

      使用-skipLibCheck tsc标志 这将阻止对库类型文件进行类型检查。但是,有些错误现在可能未被检测到,并可能在运行时击中您()

      使用类型根 使用,您可以专门提取和修复相应.d.ts声明中的冲突

      您需要的是以某种方式“打破”两个声明之间的联系。因此,可以考虑创建一个新的文件夹:“重写”,并添加“重写\ jest\index .dts”作为你想做的事情。然后更新tsconfig.json以包含“typeroot”:[“\overrides”,“\node”_modules@types"]. 它告诉编译器首先在“\overrides\jest”中查找类型,如果没有找到,则在“\node”中查找类型_modules@types\开玩笑“`


      但是,您现在必须维护基本上是类型定义文件的本地分支。如果可以的话,您应该将该修复上传到您认为应该修复的库中。

      我可能会使用Jest进行测试。但现在我无法在MonoReport中工作,我可能会使用Jest进行测试。但目前,我无法在monorepo中实现这一点
      "devDependencies": {
          // no errors when I remove those 2 packages
          "@types/jasmine": "~3.3.8",
          "@types/jasminewd2": "~2.0.3",
          // ...
        }