Skip to content

Формат конфига

Утилита запускается командой ts-stub-gen [путь-к-конфигу]. Если путь не указан, берётся файл ts-stub-gen.config.json из текущей папки. Конфиг — это JSON, все пути в нём указываются относительно самого файла конфига. Обязательны только три поля: source.type, source.entry и output.file.

Полный пример со всеми настройками:

json
{
  "source": {
    "type": "typescript",
    "entry": ["src/models/*.ts"],
    "rootDir": ".",
    "tsconfig": "tsconfig.json"
  },
  "output": {
    "file": "src/testing/stubs.ts",
    "helperPrefix": "GetStub",
    "setupFile": "src/testing/stub-setup.ts",
    "values": {
      "*.id": "nextId()",
      "Account.phone": "'+7 900 000-00-00'"
    }
  },
  "warnings": {
    "date-type": "warn"
  }
}

source

Секция описывает, откуда берутся типы.

ПолеОписание
typeТип источника. Пока поддерживается только "typescript".
entryФайл, глоб или массив глобов — из этих файлов берутся все экспортированные типы.
rootDirНеобязательно. Корень, от которого вычисляются пути импортов в сгенерированном файле. По умолчанию — папка конфига.
tsconfigНеобязательно. Путь к tsconfig вашего проекта, если при разборе типов нужны его настройки компилятора (например, paths).

Хелперы генерируются для всех экспортированных типов из entry: интерфейсов, алиасов (включая алиасы примитивов) и enum. Типы, на которые они ссылаются, подхватываются автоматически, в том числе из других файлов. Неэкспортированные типы раскрываются прямо внутри стаба.

output

Секция описывает, что и куда генерировать.

ПолеОписание
fileПуть к генерируемому файлу.
helperPrefixНеобязательно. Префикс имён хелперов. По умолчанию — GetStub.
setupFileНеобязательно. Файл, содержимое которого вклеивается в сгенерированный файл после импортов. Его функции доступны выражениям из values.
valuesНеобязательно. Кастомные значения полей: селектор → выражение. Подробно — на странице «Кастомные значения».

Если типы с одинаковым именем экспортируются из разных файлов, их хелперы различаются суффиксом пути: GetStubItem_a_item, GetStubItem_b_item.

Значения по умолчанию

Поля, для которых не задано кастомное правило, заполняются по типу:

Тип поляЗначение
string / number / boolean"" / 0 / false
литеральный тип ('ok', 42)сам литерал
unionпервый вариант из объявления
enumпервый член (enum импортируется)
массив / кортеж[] / значения по элементам
объект / Recordрекурсивно по полям / {}
Datenew Date(0)
null / undefinednull / undefined
ссылка на другой типвызов его хелпера
опциональное полене заполняется

warnings

Секция задаёт уровни предупреждений по кодам: "off" (не показывать), "warn" (показать и продолжить) или "error". Предупреждение уровня error прерывает генерацию: файл не записывается, утилита завершается с кодом 1 — удобно, чтобы падать в CI.

КодКогда возникаетПо умолчанию
behavior-in-typeВ типе данных встретилась функция или метод. Поле получает undefined as any.warn
unsupported-typeВстретился класс, Map, Set, Promise или другая неподдерживаемая конструкция. Поле получает undefined as any.warn
date-typeВстретилось поле типа Date — оно ломает JSON-сериализуемость данных. Поле получает new Date(0).off
default-exportТип объявлен через export default и был пропущен.warn
duplicate-propertyПоле объявлено в типе повторно (в TypeScript это ошибка). Используется первое объявление.warn
expansion-depthРаскрытие типа оказалось слишком глубоким (например, рекурсивный дженерик). Поле получает undefined as any.warn
ref-not-foundВнутренняя несогласованность схемы: ссылка на тип, которого нет. Поле получает undefined as any.warn
inline-cycleЦикл через неэкспортированные типы. Поле получает undefined as any.warn
value-unusedСелектор из values не совпал ни с одним полем или типом.warn
enum-not-exportedПоле использует неэкспортированный enum — импортировать его из сгенерированного файла нельзя. Экспортируйте enum; при понижении уровня подставляется значение члена с as any.error

О том, какие конструкции TypeScript инструмент понимает, рассказывает раздел «Что поддерживается» на главной странице.