В вашей ситуации в настоящее время TypeScript не поддерживает должным образом.
Давайте сначала подведем итоги вашей ситуации:
foo
, а bar
- ваша необязательная зависимость, что означаетвы ожидаете, что ваш потребитель будет использовать один из них вместе с вашей библиотекой. - Вы используете информацию о типе только из этих библиотек, то есть у вас нет зависимости кода и вы не хотите добавлять их как
dependencies
в вашей package.json
- ваша
customPackage
функция общедоступна.
В связи с пунктом 3 вам необходимо включить тип в наборы вашей библиотеки, то есть вам нужнодобавьте foo
и bar
в качестве зависимостей.Это противоречит пунктам 1 и 2.
Если наборы foo
и bar
взяты из DefinitiveTyped (то есть из пакета @types/foo
и @types/bar
), то вы можете добавить их как dependencies
в package.json
.Это решит проблему.
Если наборы foo
и bar
распространяются вместе с самими библиотеками, вы должны либо включить библиотеки как dependencies
(что вам не нужно),или создайте себе копию типов ExternalFoo
и ExternalBar
.
Это означает, что вы отрежете себя от зависимости от foo
и bar
.
Другой способ выглядитвнимательно изучите вашу библиотеку и посмотрите, нет ли какого-либо вреда, включая foo
и bar
в качестве зависимостей.В зависимости от характера вашей библиотеки, она может быть не такой плохой, как вы думаете.
Лично я обычно буду декларировать типы самостоятельно.JavaScript - это динамический язык для начала.