“TS2322:类型'超时'在运行单元测试时不能分配给'number'类型

问题描述 投票:0回答:1

我有两个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调用。

typescript unit-testing karma-runner karma-mocha
1个回答
1
投票

您可以尝试使用window.setTimeout而不仅仅是setTimeout,这样将明确使用typescript

© www.soinside.com 2019 - 2024. All rights reserved.