Appearance
Формат конфига
Утилита запускается командой 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 | рекурсивно по полям / {} |
Date | new Date(0) |
null / undefined | null / 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 инструмент понимает, рассказывает раздел «Что поддерживается» на главной странице.