问题描述
我正在尝试编译一个 Salesforce sfdx 插件,它是一个节点项目,具有(除其他外)以下依赖链,最终导致 fake-timers@^7.1.0:
@salesforce/command@2.2.0
-> @oclif/test@^1.2.4
-> fancy-test@^1.4.3
-> @types/sinon@*
-> @sinonjs/fake-timers@^7.1.0
。
使用 Typescript 编译器 tsc
编译时,出现以下错误:
node_modules/@sinonjs/fake-timers/types/fake-timers-src.d.ts:11:28 - error TS2304: Cannot find name 'queueMicrotask'.
11 queueMicrotask: typeof queueMicrotask;
~~~~~~~~~~~~~~
Found 1 error.
error Command Failed with exit code 1.
这看起来像是 fake-timers-src.d.ts
中的错误,但在 7.1.0 中引入,因此我可以尝试将版本锁定在 7.0.5,但这可能会破坏各种其他事情。
使用/维护假计时器的人知道如何解决这个问题吗?或者这会在未来的版本中修复吗?
顺便说一句,我是一个完整的 NodeJS n00b,所以如果我遗漏了一些非常明显的东西,请善待并告诉我它是什么:)
谢谢! 弗兰斯
解决方法
弗兰斯!这里来自诗浓团队的 fatso83 :)
这里的问题都与TypeScript有关,与Node无关,所以我感到您的痛苦。难怪你想知道。问题是定义可能缺少该属性。对于版本 7,我们尝试从 JSDoc 生成 TypeScript 定义。这对于更简单的类型相当有效,但最终,TypeScript 在描述类型方面比 JSDoc(如 typeof
运算符)更强大,所以这是一场艰苦的战斗,永远不会产生与可用类型相同的质量the external Definitely Typed project。我们最终放弃了这项工作,因此这不会得到修复,但它自然会在版本 8 中消失(不会发布自己的类型)。
您可以做的是:npm install @sinonjs/fake-timers@6
(以前的版本)和 npm install @types/sinonjs__fake-timers@6
(外部维护的类型)。
您可能会在 this issue 中找到相关背景。