Как мне обрабатывать необязательные одноранговые зависимости при публикации пакета TypeScript? - PullRequest
0 голосов
/ 27 января 2019

При публикации пакета TypeScript в npm, который предоставляет функцию, которая принимает входные данные либо от одной одноранговой зависимости, либо от другой, как определить необязательные одноранговые зависимости?

import { ExternalFoo } from 'foo';
import { ExternalBar } from 'bar';

export const customPackage = (source: ExternalFoo | ExternalBar) => {
    /* ... */
}

Как запретить людям использовать мойпакет от получения ошибок, когда один из двух вариантов отсутствует?

1 Ответ

0 голосов
/ 29 января 2019

В вашей ситуации в настоящее время TypeScript не поддерживает должным образом.

Давайте сначала подведем итоги вашей ситуации:

  1. foo, а bar - ваша необязательная зависимость, что означаетвы ожидаете, что ваш потребитель будет использовать один из них вместе с вашей библиотекой.
  2. Вы используете информацию о типе только из этих библиотек, то есть у вас нет зависимости кода и вы не хотите добавлять их как dependencies в вашей package.json
  3. ваша 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 - это динамический язык для начала.

...