Выбор ответа Senior tsconfig и декларации обновлено

Поле exports и типы библиотеки

Вопрос

Библиотека публикует ESM и CJS через exports в package.json. Где должно стоять условие "types" в объекте условий?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Первым: условия выбираются по порядку, types должен быть до import. При moduleResolution: node16/nodenext/bundler TS разрешает exports как Node: обходит условия в порядке объявления и берёт первое подходящее.

Варианты ответа

  1. Первым: условия выбираются по порядку, types должен быть до importправильный ответ
  2. Последним, после default: туда TS заглядывает в самом конце обхода
  3. Не важно где: TS сам сортирует условия и всегда начинает с types
  4. Вне exports, только в поле typings на верхнем уровне package.json

Разбор

При moduleResolution: node16/nodenext/bundler TS разрешает exports как Node: обходит условия в порядке объявления и берёт первое подходящее. Если default стоит раньше types, TS найдёт JS-файл и не увидит декларации. Для двойного пакета часто нужны отдельные декларации на каждую ветку (.d.mts для import и .d.cts для require), иначе типы будут врать о формате модуля. Поле types на верхнем уровне package.json в этих режимах игнорируется, если есть exports.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.

Термины по теме