Использовать объявление типов в другом пакете

#typescript #definitelytyped

#typescript #definitelytyped

Вопрос:

Я настроил частный реестр NPM, в котором размещена ветка общедоступного пакета (что разрешено лицензией пакета).

Исходный пакет имеет объявление типа, предоставленное замечательным проектом DefinitelyTyped.

В настоящее время в моем проекте, если я напишу:

 import mypackage from '@private/mypackage'
 

Типы, предоставленные DefinitelyTyped ( @types/mypackage ), не будут применяться, и я получу сообщение об ошибке:

ошибка TS7016: не удалось найти файл объявления для модуля «@private / mypackage». ‘node_modules/@private/mypackage/index.js ‘неявно имеет тип ‘any’.

В моем проекте возможно ли повторно объявить типы исходных пакетов для вилки, чтобы приведенный выше пример работал?

Ответ №1:

Вы можете добавить файл объявления ( .d.ts ) для модуля:

 declare module '@private/mypackage'
{
    import m from 'mypackage';

    export default m;
}
 

Комментарии:

1. Спасибо! Я пытался импортировать «@types / mypackage» вместо «mypackage»

2. Важное предостережение: в этом решении у меня должны быть mypackage @private/mypackage установлены оба и, иначе я не смогу импортировать mypackage . Есть ли способ использовать объявления типов без необходимости устанавливать обе версии пакета?

3. @GnxR: установка самого пакета не требуется, вам нужен только @types пакет. Если это не так, вы либо не использовали файл объявления, либо ваш инструмент сборки делает что-то неправильно. Используя только tsc я могу скомпилировать это без установки самого пакета.