Да, название вводит в заблуждение. Кто бы не писал машинописные интерфейсы, верно? Я не говорю перестать писать машинописные интерфейсы, а автоматизировать их 🫡

Что ? Как мы автоматизируем создание типов?

Postman — это инструмент для тестирования API, который может помочь нам протестировать API. Его можно использовать для тестирования API как локально, так и на хостинге. Он также действует как документация для API, который вы создаете, и не зависит от языка программирования.

Теперь представьте, что у вас есть полная документация для вашего API в виде коллекции почтальона (коллекции почтальона можно рассматривать как папку, содержащую запросы или другую коллекцию внутри нее). Каждая коллекция в почтальоне может быть загружена/сохранена как файл json, который имеет две версии схемы. Это коллекция v2 и коллекция v2.1, и они совместно используют коллекцию в виде файла json.

Теперь давайте вернемся к typescript и интерфейсам. Интерфейс имеет подпись для объекта, которая определяет все типы ключей внутри объекта.

// example of a typescript interface
interface Human{
  name: string;
  age: number;
  isMarried: boolean;
}

А теперь представьте, что это ваша коллекция. Эта коллекция здесь имеет более 20 запросов. Теперь давайте создадим тип для каждого запроса, параметра запроса и для каждого ответа в примерах.

Простой тип машинописного текста может быть создан примерно за 10–15 секунд (без инструментов ИИ) и примерно за 5–7 секунд (с инструментами ИИ). Теперь посчитаем, сколько времени занимает создание всего интерфейса? Очень долго да? А как насчет 500 запросов? 1000 запросов?

Но мне требуется всего 5 секунд, чтобы выполнить 500 запросов. Вау, действительно ? На самом деле да. У меня есть небольшой скрипт, который делает это за меня. Он просматривает json-файл экспорта коллекции и генерирует типы машинописного текста на основе содержимого json, создает интерфейс машинописного текста на основе имени запроса или имени ответа и помещает создает папку со всеми интерфейсами.

Вы можете использовать эту команду.

npx @n1rjal/pm_ts -i <input json file name> -o <output directory name>

Здесь

  • -i означает входной файл json
  • -o означает выходной каталог, в который должны быть помещены типы

Теперь давайте попробуем команду и посмотрим на результаты. Вот мой рабочий каталог в vscode без запуска скрипта.

Теперь давайте запустим скрипт как

npx @n1rjal/pm_ts -i export.json -o types

Теперь создается папка типов со следующим содержимым

Теперь давайте проверим один из запросов почтальона

Теперь давайте посмотрим, что это эквивалентный тип для тела. Сгенерированный интерфейс имеет следующее содержание. Посмотрите, как название запроса и URL-адрес сопоставляются с содержимым файла.

/*
Calculate Winners
POST: {{host}}/competition/:compId/calculate/winners
*/
export interface ICalculateWinners { 
  name: string; 
  count: number; 
  prizes: string[]; 
}

Этот скрипт теперь доступен и зарегистрирован как общедоступный скрипт в npx, и вы можете поставить ему звездочку 🌟, если вам нравится то, что я здесь делаю.