`fake-timers` 7.1.x 编译错误“找不到名称‘queueMicrotask’”

问题描述

我正在尝试编译一个 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 中找到相关背景。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...