我有两个TypeScript包,其中一个包(包A)依赖于另一个包(包B).每个包都有一个使用Karma设置的单元测试.在安装了NPM中的所有依赖项之后,当我分别 for each 依赖项运行单元测试时,单元测试运行良好.然而,如果我在包A中使用npm link package-b
并运行包A的单元测试,那么我会得到标题中所述的错误:"TS2322:类型‘Timeout’不可分配给类型‘number’."
有问题的电话是打setTimeout
.挖掘之后,我发现,在不使用npm link
单独运行测试时,TypeScript正确地将typescript/lib/lib.dom
中的setTimeout
签名识别为所需类型,但在使用npm link
后失败的情况下,它使用的是@types/node/index
中 node 的setTimeout
签名.我确认了这一点,将返回类型从setTimeout
改为string
,并观察到相同的错误,string
代替Timeout
.
我不确定的是,TypeScript编译器已经决定在这个特定的情况下使用替代定义,也不确定我如何说服它使用所需的定义.我很高兴发布一些代码,但我不确定在这种情况下什么会有用,因为失败的线路上只有setTimeout
个调用.