Ошибка компиляции `fake-timers` 7.1.x« Не удается найти имя 'queueMicrotask' ».
Я пытаюсь скомпилировать плагин Salesforce sfdx, который представляет собой проект узла со (среди прочего) следующей цепочкой зависимостей, которая в конечном итоге приводит к поддельным таймерам @^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, поэтому, если здесь есть что-то действительно очевидное, чего мне не хватает, пожалуйста, будьте добры и просто скажите мне, что это такое :)
Спасибо! Франс
1 ответ
Франс! fatso83 из команды Sinon здесь :)
Проблема здесь полностью связана с TypeScript, а не с Node, поэтому я чувствую вашу боль. Неудивительно, что вам это интересно. Проблема в том, что в определениях, вероятно, отсутствует это свойство. Для версии 7 мы попытались сгенерировать определения TypeScript из JSDoc. Это достаточно хорошо работает для более простого типа, но в конечном итоге TypeScript более мощный в описании типов, чем JSDoc (например,
typeof
operator), так что это была тяжелая битва, которая никогда не приведет к тому же качеству, что и типы, доступные из внешнего проекта Определенно Типизированный . В итоге мы отказались от этих усилий, и, следовательно, это не будет исправлено, но, естественно, исчезнет с версией 8 (которая не будет поставлять свои собственные типы).
Что вы можете сделать:
npm install @sinonjs/fake-timers@6
(это предыдущая версия) и
npm install @types/sinonjs__fake-timers@6
(которые являются поддерживаемыми извне типами).
Вы можете найти некоторую предысторию этого в этом выпуске.