Предоставление объявлений внешнего модуля TypeScript потребляющим модулям - PullRequest
0 голосов
/ 01 февраля 2019

У меня есть опубликованный модуль TypeScript (назовем его shared-stuff), который предназначен для импорта другими модулями TypeScript.Этот модуль shared-stuff имеет сторонние зависимости, которые не имеют объявлений @types, поэтому внутри этого модуля есть несколько файлов объявлений:

/lib/declarations/
  something.d.ts
  another-thing.d.ts

Эти файлы объявлений работают нормально в контексте shared-stuff.Однако, как только приложение-потребитель начинает импортировать из shared-stuff, TypeScript выдаёт мне ошибки, такие как:

Не удалось найти файл объявления для модуля 'another-thing'.

Я могу обойти эту проблему, попросив потребителя явно импортировать файлы .d.ts из зависимости, но это не идеально, так как каждый потребитель должен будет делать то же самое.

Есть ли способ получитьмодуль-потребитель "наследует" объявления от зависимости?

Ответы [ 2 ]

0 голосов
/ 01 февраля 2019

Поскольку ваш потребитель (потребитель shared-stuff) полагается на наборы another-thing, вам также необходимо экспортировать их.

Один из способов сделать это - использовать /// <reference> в вашем index.ts(и не забудьте включить ваш /lib/declarations в ваш дистрибутив.

Другой способ - не полагаться на внешние типизации. То есть вместо выполнения:

import { SomeType } from 'another-thing'
export function foo(): SomeType { ... }

Определите этот тип самостоятельно(внутри shared-stuff, а не в another-thing.d.ts):

export type SomeType = { ... }
export function foo(): SomeType { ... }

Теоретически, типы в another-thing должны следовать за семантической версией как сама библиотека, но в действительности она гораздо более склонна кпрерывание изменений.

Одна из причин заключается в том, что библиотека не была написана на языке TypeScript для начала, поэтому автор библиотеки может случайно разбить типы, даже не подозревая об этом.

Поэтому при объявлении типовВы чувствуете себя хрупким по сравнению с повторным использованием шрифтов, но на самом деле это не так (и в любом случае вы сами определяете их).

Просто убедитесь, что у вас есть хороший набор тестов, чтобы отследить любые изменения типа.

0 голосов
/ 01 февраля 2019

Есть ли способ заставить модуль-потребитель "наследовать" объявления от зависимости?

Обычный способ - иметь его как peerDepenency и упомянуть в своих документах.что его необходимо использовать, например, для react:

npm i shared-lib react @types/react

АКА, вы приносите свою собственную версию react / @types/react

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...