Ts express: Создаем приложение на Node.JS, Express и Typescript с Jest, Swagger, log4js и Routing-controllers / Хабр

Содержание

Вакансии компании ТС Экспресс

Наша компания уже давно работает на рынке и смогла зарекомендовать себя с положительной стороны. Мы предлагаем выгодные условия сотрудничества для юридических и физических лиц. Накопили уникальный опыт работы с известными мировыми производителями сетевого и коммуникационного оборудования.

Коллектив «ТС Экспресс» нацелен на достижение максимального результата в работе с клиентами и готов удовлетворить запросы самых требовательных заказчиков. Компания постоянно растёт и развивается по нескольким направлениям деятельности. Мы предоставляем лучшее соотношение качественного сервиса и доступных цен. Готовы рассмотреть любые варианты взаимовыгодного сотрудничества.

Что предлагает своим клиентам компания «ТС Экспресс»?

Многие компании нуждаются в современном сетевом и телекоммуникационном оборудовании. Мы осуществляем не только продажу оборудования, но его ремонт и скупку подержаных или неисправных устройств. В случае обновления устройств можно всегда выполнить замену старых на новые в одном месте. Удобно, быстро и выгодно. Можно сэкономить приличное количество свободного времени и сил. Мы сотрудничаем со многими известными организациями и ценим каждого клиента.

Наши услуги:

  1. Полный гарантийный ремонт и обслуживание сложного сетевого и телекоммуникационного оборудования. Все работы проводятся в максимально сжатые сроки, ведь наша компания ценит время клиентов.
  2. Широкий выбор моделей современного оборудования по доступным ценам. Полная комплектация объектов заказчика под ключ.
  3. Ремонт любого сетевого или телекоммуникационного оборудования. Применяются современные технологии диагностики, позволяющие максимально точно установить причину неисправности. На все виды ремонта в обязательном порядке предоставляется гарантия.
  4. На сайте в любое удобное для клиента время суток можно найти и приобрести оборудование. Можно найти новые и подержанные устройства после капитального ремонта. Всё зависит от индивидуальных предпочтений заказчика и его финансовых возможностей.

Почему клиенты выбирают «ТС Экспресс»?

Наша компания представлена на рынке продолжительное время. Мы знаем, что нужно клиентам и можем предложить выгодные условия продажи оборудования. Для постоянных заказчиков действуют выгодные условия оплаты и персональные скидки. Мы всегда идём навстречу клиенту и готовы решить все его вопросы связанные с ремонтом и обслуживание сетевого или телекоммуникационного оборудования.

Связаться с нами можно по номерам указанным на сайте или оставить сообщение в форме обратной связи. Специалисты выйдут на связь и уточнят детали обращения. Подобная форма сотрудничества предполагает взаимное доверие и открытость. Для исключения возникновения спорных моментов обязательно заключается договор. Не стоит забывать, что наши клиенты получают бесплатную консультацию специалистов в первую очередь. Высокое качество обслуживания и доступные цены доступны для наших клиентов всегда! 

«1С» помогает организовать эффективный учет ТС в «ТРАНСКЕМИКЛ-экспресс»

Для оптимизации процесса планирования маршрутов, максимально эффективного использования собственных транспортных средств в «ТРАНСКЕМИКЛ-экспресс» внедрен программный продукт «1С:Предприятие 8. Транспортная логистика, экспедирование и управление автотранспортом КОРП». Внедрение программы осуществили специалисты «1С-Рарус».

Компания «ТРАНСКЕМИКЛ-экспресс» специализируется на поставке химических веществ 5 и 8 классов опасности. Осуществляет поставки щелочей, кислот и солей оптом и в розницу.

В своей работе основное внимание Компания уделяет качеству доставки реагентов до покупателя. Реализовать поставки химической продукции на высочайшем уровне Компании помогает собственный автотранспорт и обширный парк специализированных емкостей. Доставку осуществляют профессиональные водители и экспедиторы, работающие в соответствии с Европейским соглашением о перевозке опасных грузов автомобильным транспортом ДОПОГ и подтвердившие свою квалификацию на практике.

Для автоматизации управления процессом перевозки руководство АО «ТРАНСКЕМИКЛ-экспресс» обратилось в «1С-Рарус», имеющий значительный успешный опыт автоматизации транспортных компаний.

Изучив бизнес процессы и задачи АО «ТРАНСКЕМИКЛ-экспресс», для оптимизации процесса планирования маршрутов, максимально эффективного использования собственных транспортных средств экспертами «1С-Рарус» было предложено строить информационное пространство на базе программного продукта «1С:Предприятие 8. Транспортная логистика, экспедирование и управление автотранспортом КОРП».

Специалисты «1С-Рарус» провели демонстрацию возможностей типовой конфигурации, выполнена поставка и установка системы на рабочие места пользователей, настроены параметры учетной политики, пользователи программы смогли получить консультации по работе в системе учета.

Результаты автоматизации на базе 1С Транспортная логистика :

  • Автоматизирована обработка и распределение заказов на транспорт, оптимизирован процесс формирования маршрута перевозки с учетом условий транспортировки груза.

  • Соблюдение графиков доставок грузов, минимизация опозданий достигнута за счет реализации механизма планирования маршрутов с учетом временных окон доставки и контроля выполнения рейса в режиме онлайн.

  • Инструменты планирования загрузки собственного транспорта позволяют снизить его простои.

  • Сокращению затрат на ремонт и продление срока службы транспортного парка способствует возможность контроля и анализа технического состояния собственного транспорта.

  • Возможности учета всех расходов автопарка, расчета себестоимости перевозок позволяют эффективно управлять бизнесом, принимая верные управленческие решения.

Совместная работа АО «ТРАНСКЕМИКЛ-экспресс» и «1С-Рарус» продолжается, заключен договор сопровождения, в рамках которого пользователям оказываются консультационные услуги по работе с программным продуктом и методологии учета.

Отрасли:

Транспорт, Логистика Оптовая торговля

Продукты:

1С:Предприятие 8. Транспортная логистика, экспедирование и управление автотранспортом КОРП

Офис:

1С-Рарус Москва

Количество АРМ:

10

Города клиентов:

Москва

@salto-io/logging — npm

TypeScript Express Starter

🚀 Express RESTful API Boilerplate с использованием TypeScript


  • 🇰🇷 Корейский
  • 🇺🇸 Английский

😎 Представляем Project

Express состоит из JavaScript, что делает его уязвимым для определений типов.

Вот почему мы избегаем расширений со стартовыми пакетами, которые представляют TypeScript.

Пакет настроен на использование TypeScript вместо JavaScript.

Проект ссылается на экспресс-генератор машинописного текста

🤔 Что такое экспресс?

Express — это быстрый, открытый и лаконичный веб-фреймворк, основанный на Node. js.

🚀 Быстрый старт

Установка с помощью глобального пакета npm

 $ npm install -g typescript-express-starter 

Запустите npx для установки пакета

npx — это инструмент в модуле управления пакетами JavaScript, npm.

Это инструмент, позволяющий запускать пакет npm за один раз без установки пакета.

Если вы не вводите имя проекта, по умолчанию используется typescript-express-starter .

 $ npx typescript-express-starter "имя проекта" 

Выберите шаблоны

Запустите приложение typescript-express-starter в режиме разработки по адресу http://localhost:3000/

Тип шаблона
6 Имя Описание По умолчанию Экспресс по умолчанию Контроллеры маршрутизации Создавайте структурированные, декларативные и красиво организованные контроллеры на основе классов с интенсивным использованием декораторов Продолжение Простой в использовании ORM с несколькими диалектами SQL для Node. js Мангуст Объектное моделирование MongoDB (ODM), предназначенное для работы в асинхронной среде
ТипORM ORM, который может работать в Node.js и других Призма Современный доступ к базе данных для TypeScript и Node.js Кнекс Построитель запросов SQL для Postgres, MySQL, MariaDB, SQLite3 и Oracle GraphQL язык запросов для API и среда выполнения для выполнения этих запросов с вашими существующими данными Типгусь Определение моделей Mongoose с использованием классов TypeScript Микро ОРМ TypeScript ORM для Node.js на основе шаблонов Data Mapper, Unit of Work и Identity Map. Поддерживает базы данных MongoDB, MySQL, MariaDB, PostgreSQL и SQLite.
Узел Postgres node-postgres — это набор модулей node.js для взаимодействия с вашей базой данных PostgreSQL.
Шаблон для разработки
Имя Описание
Удлинить машинописный текст Декораторы и некоторые другие функции для продолжения
ТС SQL База данных SQL, реализованная исключительно в аннотациях типа TypeScript
инвертированные экспресс-утилиты Некоторые утилиты для разработки экспресс-приложения с InversifyJS
постгресс машинопись
графическая призма

🛎 Доступные команды для сервера

  • Запустите сервер в производственном режиме: npm run start или Запустите typescript-express-starter в VS Code
  • Запустите сервер в режиме разработки: npm run dev или Dev typescript-express-starter в VS Code
  • Запустить все модульные тесты: npm test или Test typescript-express-starter в VS Code
  • Проверка на ошибки linting: npm run lint или Lint typescript-express-starter в коде VS
  • Исправление для linting: npm run lint: fix или Lint: Fix typescript-express-starter в VS Code

💎 Особенности упаковки

🐳 Docker :: Container Platform

Docker — это платформа для разработчиков и системных администраторов, позволяющая создавать, запускать и совместно использовать приложения с помощью контейнеров.

Установка докера.

  • запускает контейнеры в фоновом режиме и оставляет их работающими: docker-compose up -d
  • Останавливает контейнеры и удаляет контейнеры, сети, тома и образы: docker-compose down

Измените файлы docker-compose.yml и Dockerfile на свой исходный код.

♻️ NGINX :: Веб-сервер

NGINX — это веб-сервер, который также можно использовать в качестве обратного прокси-сервера, балансировщика нагрузки, почтового прокси-сервера и кэша HTTP.

Проксирование обычно используется для распределения нагрузки между несколькими серверами, беспрепятственного отображения контента с разных веб-сайтов или передачи запросов на обработку серверам приложений по протоколам, отличным от HTTP.

Когда NGINX проксирует запрос, он отправляет запрос на указанный проксируемый сервер, получает ответ и отправляет его обратно клиенту.

Измените файл nginx. conf на свой исходный код.

✨ ESLint, Prettier :: Code Formatter

Prettier — программа для форматирования кода.

ESLint, Найдите и устраните проблемы в вашем коде JavaScript

Он обеспечивает согласованный стиль, анализируя ваш код и перепечатывая его по своим собственным правилам, которые учитывают максимальную длину строки, при необходимости перенося код.

  1. Установить расширение VSCode Prettier, ESLint

  2. CMD + Shift + P

    (Mac Os) или Ctrl + Shift + P (Windows)

  3. Выбор формата с

  4. Настройка форматирования по умолчанию...

  5. Prettier - Форматировщик кода

Palantir, сторонники TSLint, объявили в 2019 году, что они отказываются от поддержки TSLint в пользу поддержки typescript-eslint, чтобы принести пользу сообществу. Итак, миграция с TSLint на ESLint.

📗 Swagger :: Документ API

Swagger — это упрощение разработки API для пользователей, команд и предприятий с помощью набора инструментов Swagger с открытым исходным кодом и профессионального инструментария.

Легко используется Swagger для проектирования и документирования API в любом масштабе.

Запустите приложение в режиме разработки по адресу http://localhost:3000/api-docs

Измените файл swagger.yaml на свой исходный код.

🌐 Клиент REST :: Инструменты HTTP-клиента

Клиент REST позволяет отправлять HTTP-запрос и просматривать ответ непосредственно в коде Visual Studio.

Установка клиента REST расширения VSCode.

Измените файл *.http в папке src/http на ваш исходный код.

🔮 PM2 :: Advanced, диспетчер производственных процессов для Node.js

PM2 — это демон-менеджер процессов, который поможет вам управлять приложением и поддерживать его онлайн 24/7.

  • производственный режим :: npm run deploy:prod или pm2 start экосистема.config.js --only prod
  • режим разработки ::
    npm run deploy:dev
    или pm2 start экосистема.config.js --only dev

Измените файл экосистемы.config.js на свой исходный код.

🏎 SWC :: сверхбыстрый компилятор JavaScript/TypeScript

SWC — это расширяемая платформа на основе Rust для нового поколения быстрых инструментов разработки.

SWC в 20 раз быстрее, чем Babel, на одном потоке и в 70 раз быстрее на четырех ядрах.

  • tsc build :: npm run build
  • swc build :: npm run build: swc

Измените файл .swcrc на свой исходный код.

💄 Makefile :: Это файл настроек программы make, используемый для многократной компиляции в Linux 9.0034

Файлы Makefile используются, чтобы решить, какие части большой программы необходимо перекомпилировать.

  • помощь :: сделать помощь

Измените файл Makefile на свой исходный код.

🗂 Структура кода (по умолчанию)

 │
├──📂 .vscode
│ ├── launch.json
│ └── settings.json
│
├──📂 источник
│ ├──📂 конфиг
│ │ └── index.ts
│ │
│ ├──📂 контроллеры
│ │ ├── auth.controller.ts
│ │ └── пользователи.controller.ts
│ │
│ ├──📂 дтос
│ │ └── пользователи.dto.ts
│ │
│ ├──📂 исключения
│ │ └── httpException.ts
│ │
│ ├──📂 http
│ │ ├── авт.http
│ │ └── пользователи.http
│ │
│ ├──📂 интерфейсы
│ │ ├── auth.interface.ts
│ │ ├── route.interface.ts
│ │ └── users.interface.ts
│ │
│ ├──📂 промежуточное ПО
│ │ ├── auth.middleware.ts
│ │ ├── error.middleware.ts
│ │ └── validation.middleware.ts
│ │
│ ├──📂 модели
│ │ └── пользователи.модель.ts
│ │
│ ├──📂 маршруты
│ │ ├── auth.route.ts
│ │ └── users.route.ts
│ │
│ ├──📂 услуги
│ │ ├── auth.service.ts
│ │ └── пользователи.service.ts
│ │
│ ├──📂 тест
│ │ ├── auth.test.ts
│ │ └── пользователи.test.ts
│ │
│ ├──📂 утилиты
│ │ ├── logger. ts
│ │ └── vaildateEnv.ts
│ │
│ ├── app.ts
│ └── server.ts
│
├── .dockerignore
├── .editorconfig
├── .env.development.local
├── .env.production.local
├── .env.test.local
├── .eslintignore
├── .eslintrc
├── .gitignore
├── .huskyrc
├── .lintstagerc.json
├── .prettierrc
├── .swcrc
├── docker-compose.yml
├── Dockerfile.dev
├── Dockerfile.prod
├── экосистема.config.js
├── jest.config.js
├── Makefile
├── nginx.conf
├── nodemon.json
├── package-lock.json
├── package.json
├── swagger.yaml
└── tsconfig.json 

⭐️ Stargazers

🍴 Forkers

🤝 Contributors

💳 License

MIT

📑 Recommended Commit Message

When Сообщение фиксации
Добавить функцию ✨ Добавить функцию
Исправить ошибку 🐞 Исправить ошибку
Код рефакторинга 🛠 Код ​​рефакторинга
Установить пакет 📦 Установить пакет
Исправление Readme 📚 Исправление Readme
Версия обновления 🌼 Обновление версии
Новый шаблон 🎉 Новый шаблон

📬 Пожалуйста, задайте вопрос

Пожалуйста, оставьте вопрос или вопрос как вопрос.

Я сделаю все возможное, чтобы ответить и подумать.

Спасибо за проявленный интерес.

Станьте лучше с TypeScript, используя Express

Привет ребята Добрый день!

Сегодня мы создадим Rest API , используя эти две технологии. Вы можете подумать, что это еще один Rest API , как и все остальные, но в этом примере мы будем использовать множество расширенных функций TypeScript , которые будут действительно полезны для этой демонстрации. Но мы будем больше сосредоточены на использовании TypeScript вместо реализации бизнес-логики. Я предлагаю использовать VSCode в этом примере, потому что он предоставляет множество функций с TypeScript .

API, который мы будем создавать, будет ориентирован на собак. Наши конечные точки будут выглядеть так.

 ПОЛУЧИТЬ /api/v1/dogs
ПОЛУЧИТЬ /api/v1/dogs/:id
ПОСТ /api/v1/собаки
ПОЛОЖИТЬ /api/v1/dogs/:id
УДАЛИТЬ /api/v1/dogs/:id
 
Войти в полноэкранный режимВыйти из полноэкранного режима

Сначала создайте папку, вы можете назвать ее как хотите. Я назову свой express-ts-api .

 мкдир экспресс-ц-апи
 
Войти в полноэкранный режимВыйти из полноэкранного режима

После этого инициализируйте проект узла.

 инициализация npm --y
 
Войти в полноэкранный режимВыйти из полноэкранного режима

Нам также необходимо установить TypeScript .

 npm i -D машинопись
 
Войти в полноэкранный режимВыйти из полноэкранного режима

Нам также необходимо установить определения типов для этих Express и Node .

 npm i -D @types/express @types/node
 
Войти в полноэкранный режимВыйти из полноэкранного режима

А так же установим экспресс

 нпм я экспресс
 
Войти в полноэкранный режимВыйти из полноэкранного режима

Наконец, настройте этот проект как проект TypeScript .
Использование этой команды

 tsc -init
 
Войти в полноэкранный режимВыйти из полноэкранного режима

Наш tsconfig. json будет выглядеть так.

 {
  "Параметры компилятора": {
    "цель": "es5",
    "модуль": "commonjs",
    "outDir": "./сборка",
    "rootDir": "./src",
    "строгий": правда,
    «эсмодулеинтероп»: правда
  }
}
 
Войти в полноэкранный режимВыйти из полноэкранного режима

Проще говоря, эта конфигурация говорит нам, что наш код будет выводиться в синтаксисе es5 ("цель": "es5") , а также этот код будет использовать модульную систему CommonJS ("модуль" : "commonjs") в каталоге build ("outDir": "./build") на основе содержимого каталога src ("rootDir": "./src") и Языковая служба typescript должна обеспечивать строгую проверку типов ("strict": "true") и, наконец, мы хотим импортировать модули в разные модульные системы , такие как commonjs , следуйте спецификациям модуля ES6 ("esModuleInterop": true) без этой опции наш импорт будет выглядеть так

 import * as express от «экспресс»;
// вместо этого
// импортируем экспресс из 'express';
 
Войти в полноэкранный режимВыйти из полноэкранного режима

Наш package. 4.17.1" } } Войти в полноэкранный режимВыйти из полноэкранного режима

Я предполагаю, что вы уже знакомы с nodejs, поэтому я не буду объяснять содержимое этого файла.

Хорошо, приступим. Сделать каталог src

 mkdir src
 
Войдите в полноэкранный режимВыйдите из полноэкранного режима

Внутри папки src создайте файл app.ts .

 импорт экспресс из «экспресс»
постоянное приложение = экспресс()
интерфейс Собака {
  имя: строка
  порода: лабрадор | 'немецкая овчарка' | 'золотистый ретривер'
  accept_at: Дата | нулевой
  дата_рождения: Дата | нулевой
}
 
Войти в полноэкранный режимВыйти из полноэкранного режима

Кстати, каждый метод HTTP, который мы используем в объекте приложения , имеет пять общих типов, которые мы можем предоставить для наших пользовательских типов. Расположение типов Params , ResBody , ReqBody , ReqQuery и Locals . Подробнее о Generics здесь. По сути, Generics помогает нам повторно использовать код, но в нашем случае мы можем повторно использовать типы.

 app.get('/api/v1/dogs',
(требование, разрешение) => {
})
 
Войти в полноэкранный режимВыйти из полноэкранного режима

В этом примере мы будем использовать только первые четыре общих типа. По умолчанию универсальный тип Params имеет значение типа пустого объекта. ResBody и ReqBody имеет тип any , и, наконец, ReqQuery имеет тип ParsedQs .

Мы будем предоставлять свои собственные типы вместо типов по умолчанию, предоставляемых экспресс.

ПОЛУЧИТЬ /api/v1/собаки

 приложение.получить<
{},
{данные: собака[], сообщение: строка},
{},
{ страница: число, лимит: число, порода: 'лабрадор' | 'немецкая овчарка' | 'золотистый ретривер' }>
('/api/v1/dogs', (req,res) => {
  // ваша реализация
})
 
Войти в полноэкранный режимВыйти из полноэкранного режима

В этой конечной точке мы получим список собак, поэтому мы не будем передавать тип в общем Params , потому что мы не получаем конкретную собаку. Мы получаем список собак в этой конечной точке, поэтому оставим его как пустой объект. Во-вторых, ResBody - это тип, который мы отправим в методе res.send , в этом случае мы отправим объект, который имеет два свойства data , тип которого представляет собой массив Dogs, который мы предоставили ранее, и сообщение , чье тип — строка — дополнительная информация для ответа. В-третьих, ReqBody — это пустой тип объекта, потому что мы не будем получать никаких данных в этой конечной точке. И, наконец, в ReqQuery мы будем передавать тип объекта, который принимает свойства нумерации страниц 9.0050 стр. и ограничивают , а также свойство породы, поэтому мы можем использовать его для фильтрации собак по конкретной породе.

ПОЛУЧИТЬ /api/v1/dogs/:id

 app.get<
{ идентификационный номер },
{ данные: Собака | ноль, сообщение: строка },
{}>
('/api/v1/dogs/:id', (req,res) => {
  // ваша реализация
})
 
Войти в полноэкранный режимВыйти из полноэкранного режима

В этой конечной точке мы получим конкретную собаку, поэтому мы передадим тип объекта в параметрах , свойство которого равно id , который имеет тип номер , потому что мы получим конкретную собаку. Мы получаем список собак в этой конечной точке, поэтому оставим его как пустой объект. Во-вторых, ResBody , в этом случае мы отправим объект, который имеет два свойства: данные , тип которых представляет собой тип объединения типа Dog и null , это говорит нам, что если собака существует, она будет верните форму Dog , и если она не существует, она вернет null и свойство message типом которого является строка . В-третьих, ReqBody также является пустым типом объекта, потому что мы не будем получать никаких данных в этой конечной точке. И, наконец, мы будем передавать пустой тип объекта для ReqQuery , потому что этой конечной точке он не нужен.

ПОСТ /api/v1/собаки

 приложение.пост<
{},
{данные: собака и {идентификатор: номер}, сообщение: строка},
Собака,
{}>
('/api/v1/dogs', (req,res) => {
  // ваша реализация
})
 
Войти в полноэкранный режимВыйти из полноэкранного режима

В этой конечной точке мы создадим новую собаку, поэтому мы передадим пустой тип объекта в параметрах . Во-вторых, ResBody , в этом случае мы отправим объект, который имеет два свойства данные , тип которых представляет собой тип объединения типа Dog , и тип объекта, который имеет свойство id , которое это тип номер , потому что БД будет генерировать этот идентификатор вместо клиента и свойства 9Сообщение 0050 , тип которого представляет собой строку . В-третьих, ReqBody имеет тип Dog , потому что мы будем получать данные от клиента, которые имеют форму Dog . И, наконец, мы будем передавать пустой тип объекта для ReqQuery , потому что этой конечной точке он не нужен.

ПОЛОЖИТЬ /api/v1/dogs/:id

 app.put<
{ идентификационный номер },
{данные: собака и {идентификатор: номер}, сообщение: строка},
Частичное <Собака>,
{}>
('/api/v1/dogs', (req,res) => {
  // ваша реализация
})
 
Войти в полноэкранный режимВыйти из полноэкранного режима

В этой конечной точке мы будем обновлять существующую собаку, поэтому мы передадим тип объекта в Параметрах , чьим свойством является id , который имеет тип номер . Во-вторых, ResBody , в этом случае мы отправим объект, который имеет два свойства данные , тип которых представляет собой тип объединения типа Dog , и тип объекта, который имеет свойство id , которое тип число , потому что мы вернем обновленное значение ресурса, а также свойство сообщение , тип которого является строкой . В-третьих, ReqBody имеет тип Dog , потому что мы будем получать данные от клиента, которые имеют форму Dog , но каждое свойство должно быть необязательным, поскольку это обновление, поэтому мы используем Utility Type Partial. , что делает каждое свойство в интерфейсе Dog необязательным. И, наконец, мы будем передавать пустой тип объекта для ReqQuery , поскольку этой конечной точке это не нужно.

УДАЛИТЬ /api/v1/dogs/:id

 приложение.удалить<
{ идентификационный номер },
{данные: собака и {идентификатор: номер}, сообщение: строка},
{},
{}>
('/api/v1/dogs', (req,res) => {
  // ваша реализация
})
 
Войти в полноэкранный режимВыйти из полноэкранного режима

В этой конечной точке мы будем удалять собаку, поэтому мы передадим тип объекта в Параметрах , свойство которого является id , который имеет тип число . Во-вторых, ResBody , в этом случае мы отправим объект, который имеет два свойства данные , тип которых представляет собой тип объединения типа Dog , и тип объекта, который имеет свойство id , которое имеет тип номер , потому что мы вернем удаленный ресурс собаки, а также свойство сообщение , тип которого является строкой . В-третьих, ReqBody — это пустой тип объекта, потому что мы не будем получать никаких данных в этой конечной точке. И, наконец, мы будем передавать пустой тип объекта для ReqQuery , поскольку этой конечной точке это не нужно.

Думаю, мы закончили.

Думаю, мы еще не закончили. Мы передавали наши собственные пользовательские типы напрямую, и некоторые из этих типов повторялись в некоторых наших методах, и это делало наш код нечистым. Давайте изменим это.

 интерфейс BaseParams {
  идентификатор: IDType
}
интерфейс DogDetails {
  имя: строка
  порода: DogBreed
  accept_at: Дата | нулевой
  дата_рождения: Дата | нулевой
}
интерфейс APIResponse {
  данные: данные
  сообщение: строка
}
интерфейс Пагинация {
  номер страницы
  лимит: число
  порода: DogBreed
}
интерфейс Пустой {
}
введите DogBreed = 'лабрадор' | 'немецкая овчарка' | 'золотистый ретривер'
тип Dog = BaseParams & DogDetails
 
Войти в полноэкранный режимВыйти из полноэкранного режима

Хорошо, я объясню все эти новые типы, которые вы видите. Во-первых, интерфейс BaseParams — это тип, который мы предоставим позиции Params , BaseParams имеет Общий тип IDType , который имеет значение по умолчанию типа номер , вы также можете указать другой тип для id , передав здесь другой тип BaseParams . Интерфейс DogDetails — это тип, который мы будем использовать для позиции ReqBody . Интерфейс APIResponse — это тип, который мы будем использовать для позиции ResBody , этот тип также имеет универсальный тип, как и тип BaseParams , универсальный тип ResultType будет типом свойства data . Интерфейс Pagination — это тип, который мы будем использовать для позиции ReqQuery , у этого типа есть свойство порода ссылается на другой пользовательский тип, о котором мы скоро поговорим. Интерфейс Empty — это тип вспомогательного интерфейса, который мы будем использовать для пустых объектов. Псевдоним типа DogBreed также является вспомогательным типом, на который ссылаются в интерфейсе Pagination , а также в интерфейсе DogDetails . И, наконец, псевдоним типа Dog представляет собой комбинацию двух интерфейсов BaseParams и DogDetails , мы достигли этого с помощью 9Тип пересечения 0050 и .

Если мы применим все эти новые типы в нашем коде, наш код должен выглядеть так.

 импорт экспресс из «экспресс»
постоянное приложение = экспресс()
интерфейс BaseParams {
 идентификатор: IDType
}
интерфейс DogDetails {
 имя: строка
 порода: DogBreed
 accept_at: Дата | нулевой
 дата_рождения: Дата | нулевой
}
интерфейс APIResponse {
 данные: данные
 сообщение: строка
}
интерфейс Пагинация {
 номер страницы
 лимит: число
 порода: DogBreed
}
интерфейс Пустой {
}
введите DogBreed = 'лабрадор' | 'немецкая овчарка' | 'золотистый ретривер'
тип Dog = BaseParams & DogDetails
app.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *