onlinetools.dev

JSON → типы TypeScript

Мгновенно выводите интерфейсы TypeScript из примера JSON

Работает локально
loading…
Об этом инструменте

Вставьте образец JSON — ответ API, конфигурационный файл — и получите выведенный из него интерфейс TypeScript: вложенные объекты становятся вложенными типами, массивы получают типы элементов (с объединениями для смешанного содержимого), а ключи, не являющиеся допустимыми идентификаторами, корректно берутся в кавычки.

Сгенерированные типы — это отправная точка, а не контракт: вывод типов видит один образец, поэтому поле, оказавшееся в вашем примере null, типизируется как null, а опциональные поля, которых в образце не было, ему попросту неизвестны. Вывод намеренно простой — без декораторов, без валидации во время выполнения, — чтобы его можно было вставить куда угодно и доработать.

Для полей, меняющихся между запросами, прогоните второй образец и объедините вручную либо перейдите на schema-first инструменты (OpenAPI, zod), когда форма стабилизируется. Для повседневного «мне просто нужен тип для этого ответа» достаточно одной вставки.

Частые вопросы

Почему моё nullable-поле типизировано просто как null?
Вывод типов видит только вставленный образец. Если поле там было null, null — это всё, что он может знать. Замените на string | null (или каким бы ни был реальный тип) после генерации — либо вставьте образец, где поле заполнено.
Как обрабатываются опциональные поля?
Они не определяются — по одному образцу невозможно отличить «есть всегда» от «есть в этот раз». Поля, отсутствующие в образце, отсутствуют и в типе. Помечайте поля опциональными (name?:) вручную там, где вы знаете, что API их опускает.
Что дают массивы со смешанными типами?
Объединение: из [1, "a"] выводится (number | string)[]. Из пустых массивов выводится unknown[], поскольку нет элемента для анализа — замените на реальный тип элемента, когда он вам известен.
Использовать выведенные типы или библиотеку схем вроде zod?
Выведенные интерфейсы существуют только на этапе компиляции — во время выполнения они ничего не проверяют. Для внутренних инструментов и быстрой типизации они идеальны; для недоверенного ввода во время выполнения определите схему zod/valibot и выводите статический тип из неё.
Похожие инструменты