我有两个TypeScript包,一个包(包A)依赖于另一个包(包B)。每个包都使用Karma进行单元测试。在从NPM安装所有依赖项后,我单独运行单元测试时,单元测试运行正常。但是,如果我在包A中使用npm link package-b
并运行Package A的单元测试,那么我会收到标题中所述的错误:“TS2322:类型'Timeout'不能指定为'number'类型。”
有问题的线是对setTimeout
的调用。在挖掘之后,我发现在没有npm link
的情况下单独运行测试时,TypeScript正确地将setTimeout
中的typescript/lib/lib.dom
签名识别为所需类型,但在使用npm link
之后的失败案例中,它使用了setTimeout
中的Node的@types/node/index
签名。我通过将setTimeout
上的返回类型更改为string
并使用string
代替Timeout
来观察相同的错误来证实这一点。
我不确定的是TypeScript编译器决定在这种特定情况下使用替代定义,以及我如何说服它使用所需的定义。我很乐意发布一些代码,但我不确定在这种情况下什么是有用的,因为失败线上的所有内容都是setTimeout
调用。
您可以尝试使用window.setTimeout
而不仅仅是setTimeout,这样将明确使用typescript