Почему typescript пытается загрузить неправильные определения типов?

#typescript

Вопрос:

Когда я пытаюсь запустить typescript в своем проекте, я получаю следующее:

 # ./node_modules/typescript/bin/tsc --project tsconfig.json 
node_modules/@types/webpack/index.d.ts:32:3 - error TS2305: Module '"../../tapable/tapable"' has no exported member 'Tapable'.

32   Tapable,
     ~~~~~~~

node_modules/@types/webpack/index.d.ts:1062:23 - error TS2707: Generic type 'SyncWaterfallHook<T, AdditionalOptions>' requires between 1 and 2 type arguments.

1062             resolver: SyncWaterfallHook;
                           ~~~~~~~~~~~~~~~~~

node_modules/@types/webpack/index.d.ts:1063:22 - error TS2707: Generic type 'SyncWaterfallHook<T, AdditionalOptions>' requires between 1 and 2 type arguments.

1063             factory: SyncWaterfallHook;
                          ~~~~~~~~~~~~~~~~~

node_modules/@types/webpack/index.d.ts:1064:28 - error TS2707: Generic type 'AsyncSeriesWaterfallHook<T, AdditionalOptions>' requires between 1 and 2 type arguments.

1064             beforeResolve: AsyncSeriesWaterfallHook;
                                ~~~~~~~~~~~~~~~~~~~~~~~~
 

… и так далее. 89 ошибок.

Первая строка вывода предполагает, что это типы чтения из ./node_modules/tapable/tapable.d.ts . Этот файл типов не экспортируется Tapable ; и он экспортирует другие типы, например, AsyncSeriesWaterfallHook с параметрами типа. Таким образом, все это согласуется с сообщением об ошибке.

Там также есть файл ./node_modules/@types/tapable/index.ts . Это действительно экспорт Tapable . Я не прошел через все ошибки, но из примеров, которые я проверил, кажется, что этот файл типов экспортируется с одинаковыми именами, но разными параметрами типов, которые соответствуют тому, что объявлено webpack.

Другими словами, модуль npm tapable имеет два конфликтующих файла определения типов: один внутри собственного модуля и один в @types/tapable модуле. Веб-пакет, похоже, создан для @types одного, но он пытается проверить соответствие другому.

Пакет.json для webpack (версия 5.24.4) имеет "tapable": "^2.1.1" . записываемый на пленку имеет "version": "2.1.1" . Так что они должны совпадать.

Что происходит? Как мне сделать эту компиляцию?