最佳答案
我有两个 TypeScript 包,其中一个包(包 A)依赖于另一个包(包 B)。每个软件包都使用 Karma 设置了一个单元测试。在安装了来自 NPM 的所有依赖项之后,对每个测试单独运行单元测试时,单元测试运行良好。但是,如果我在包 A 中使用 npm link package-b
并运行包 A 的单元测试,那么我会得到标题中提到的错误: “ TS2322: 键入‘ Timeout’不能分配给键入‘ number’。”
有问题的电话是打给 setTimeout
的。深入研究之后,我发现 TypeScript 在不使用 npm link
单独运行测试时,正确地将 typescript/lib/lib.dom
中的 setTimeout
签名识别为所需类型,但在使用 npm link
失败的情况下,它在 @types/node/index
中使用的是 Node 的 setTimeout
签名。我通过将 setTimeout
上的返回类型更改为 string
并在 npm link
0的位置观察到与 string
相同的错误来确认这一点。
我不确定的是 为什么 TypeScript 编译器已经决定在这个特定的情况下使用替代定义,也不知道我如何说服它使用所需的定义。我很乐意发布一些代码,但是我不确定在这种情况下什么是有用的,因为所有的故障行是 setTimeout
调用。