Ошибка компиляции `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 (например, typeofoperator), так что это была тяжелая битва, которая никогда не приведет к тому же качеству, что и типы, доступные из внешнего проекта Определенно Типизированный . В итоге мы отказались от этих усилий, и, следовательно, это не будет исправлено, но, естественно, исчезнет с версией 8 (которая не будет поставлять свои собственные типы).

Что вы можете сделать: npm install @sinonjs/fake-timers@6 (это предыдущая версия) и npm install @types/sinonjs__fake-timers@6 (которые являются поддерживаемыми извне типами).

Вы можете найти некоторую предысторию этого в этом выпуске.

Другие вопросы по тегам