Связывал ли TypeScript с Backend

Ответ

TypeScript можно интегрировать с бэкендом несколькими способами:

  1. Общие типы - можно выносить интерфейсы/типы в отдельный пакет и использовать на фронтенде и бэкенде. Например:
// shared-types package
export interface User {
  id: string;
  name: string;
}
  1. tRPC - современный RPC-фреймворк, который автоматически синхронизирует типы между клиентом и сервером.

  2. Swagger/OpenAPI - генерация типов из API спецификации. Инструменты вроде openapi-typescript создают TS-типы на основе схемы API.

  3. GraphQL - с помощью кодогенерации (например, Apollo Client) можно получать типы на основе GraphQL-схемы.

Это помогает поддерживать типобезопасность на всем стеке и ловить ошибки на этапе компиляции.

Ответ 18+ 🔞

Да ты посмотри, какая тема подъехала! TypeScript и бэкенд, блядь. Ну это ж просто песня, а не разработка, когда типы не разбегаются как тараканы по углам, а живут дружной семьёй.

Слушай сюда, вариантов-то, оказывается, дохуя!

Первый способ — типа, общие типы. Это когда ты берешь свои интерфейсы, эти вот User, Order, всякую такую хуйню, и выносишь их в отдельный пакет. Ну, представляешь, как будто библиотеку свою. И потом этот пакет ты и на бэке подключаешь, и на фронте. И всё, пиздец, магия — описал поле email как строку, а потом на бэке попробуй число туда сунуть — компилятор тебе такую оплеуху нарисует, мало не покажется. Красота!

// Вот в этом нашем shared-пакете лежит, например
export interface User {
  id: string;
  name: string;
  email: string; // Попробуй тут на бэке number передать — сразу получишь втык!
}

Второй способ — tRPC. О, это вообще, блядь, какая-то ебейшая магия 21 века. Ты на бэке пишешь процедуру, а на фронте у тебя уже готовый типизированный клиент, который знает, что эта процедура возвращает и что принимает. Никаких ручных запросов, никакого гадания на кофейной гуще, что там API отдаст. Всё автоматом, как по маслу. Пишешь на бэке getUser(id: string): Promise<User>, и на фронте уже IDE тебе подсказывает, что id — строка, а вернётся User. Просто ёперный театр!

Третий — Swagger, он же OpenAPI. Ну, это классика жанра для тех, кто любит порядок и документы. Описываешь своё API в YAML или JSON, а потом берёшь инструмент, например, openapi-typescript, и он тебе из этой схемы генерирует пачку TypeScript-типов. Получается такая здоровенная пачка интерфейсов, которые точно описывают все твои запросы и ответы. Главное — схему поддерживать в актуальном состоянии, а то будет как в том анекдоте: "документация есть, но она устарела, блядь".

Четвёртый — GraphQL. Тут своя философия, конечно. Ты описываешь схему — какие данные можно запросить. А потом, с помощью кодогенераторов вроде того, что у Apollo, ты на фронтенде получаешь готовые TypeScript-типы для всех твоих запросов и мутаций. Запросил поле title у Post — и тип уже знает, что это строка. Очень удобно, если ты не любишь перегружать сеть лишними данными и хочешь запрашивать только то, что нужно.

И знаешь, в чём общая фишка всех этих способов? Типобезопасность на всём стеке, ёпта! Ошибки, которые раньше всплывали только в рантайме, когда уже пользователь на кнопку нажал и всё упало, теперь ловятся на этапе компиляции. Ты ещё код не запустил, а тебе уже говорят: "Э, дружок-пирожок, ты тут в запросе поле nmae опечатался, а надо name". И жить сразу становится проще, и волнение ебать — на нуле.