0Pricing
TypeScript Academy · Урок

Сквозная безопасность типов: процесс от схемы

Поддерживайте единый источник истины — от схемы до клиента

«Сквозная безопасность типов: процесс от схемы» — бесплатный урок TypeScript Academy на CoddyKit. Это урок 4 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения TypeScript Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс TypeScript Academy содержит 4 уроков всего.

Что такое схема как источник истины

Схема как источник истины означает, что схема GraphQL является единственным источником истины. Типы интерфейса, резолверы сервера и контракты API выводятся из неё, поэтому ни один слой не рассинхронизируется с остальными.

# The workflow:
# 1. Define schema (.graphql or SDL)
# 2. Generate server resolver types
# 3. Generate client operation types
# 4. Both sides automatically stay in sync

Определение схемы

Запишите схему GraphQL в SDL (файлы .graphql) и сохраните её в репозитории как контракт между клиентом и сервером.

# schema.graphql
type User {
  id: ID!
  name: String!
  email: String!
}

type Query {
  user(id: ID!): User
}

Сервер: генерация типов резолверов

Запустите генерацию кода с плагином typescript-resolvers, чтобы сгенерировать типизированные сигнатуры резолверов на основе схемы.

# Server codegen step
npx graphql-codegen --config codegen.server.yml

Клиент: генерация типов операций

Запустите генерацию кода с typescript-operations и плагинами Apollo/urql, чтобы сгенерировать типизированные хуки на основе файлов операций .graphql.

# Client codegen step
npx graphql-codegen --config codegen.client.yml

Обнаружение критических изменений

Используйте graphql-inspector, чтобы обнаруживать критические изменения схемы (удаление полей, изменение типов) до их попадания в рабочую среду.

npx graphql-inspector diff ./api/schema.graphql ./api/schema.new.graphql
# Reports: BREAKING: Field 'User.email' was removed

Реестр схем

Реестр схем (Apollo Studio, Hive) хранит версии схемы, отслеживает изменения со временем и предупреждает о критических изменениях в CI.

# Push schema to Apollo Studio:
npx apollo schema:push --endpoint https://api.example.com/graphql

Создание имитаций по схеме

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

import { buildClientSchema, introspectionFromSchema } from "graphql";
import { addMocksToSchema } from "@graphql-tools/mock";
const schema = buildClientSchema(introspectionResult);
const mockedSchema = addMocksToSchema({ schema });

tRPC как альтернатива

Для проектов только на TypeScript tRPC обеспечивает сквозную типобезопасность без языка схем: тип маршрутизатора сервера IS является контрактом клиента.

// Server: router infers types
const router = t.router({ getUser: t.procedure.query(() => fetchUser()) });
// Client: types flow automatically via inference
const { data } = trpc.getUser.useQuery();

Zod + tRPC для проверки

Объединяйте схемы Zod с валидаторами входных данных tRPC для проверки во время выполнения и получения типов во время компиляции из единого определения.

const createUser = t.procedure
  .input(z.object({ name: z.string(), email: z.string().email() }))
  .mutation(({ input }) => saveUser(input));
// input: { name: string; email: string } — from Zod schema

CI: полный конвейер безопасности схемы

Полный конвейер CI для безопасности схемы как источника истины: проверьте стиль схемы → проверьте критические изменения → запустите генерацию кода → проверьте типы → запустите тесты.

# .github/workflows/schema.yml
- run: npx graphql-inspector validate ...
- run: npx graphql-codegen --check
- run: npx tsc --noEmit
- run: npm test

Итоги: рабочий процесс со схемой как источником истины

TypeScript со схемой как источником истины: определите SDL → сгенерируйте типы резолверов сервера → сгенерируйте типы операций клиента → обнаружьте критические изменения в CI. Схема является единственным источником истины для всех слоёв типобезопасности.

Быстрая проверка

Какова роль схемы GraphQL в рабочем процессе, где схема является источником истины?

Чему Вы научились

Рабочие процессы TypeScript со схемой как источником истины получают все типы из схемы GraphQL. Генерируйте типы резолверов для сервера и типы операций для клиента, обнаруживайте критические изменения в CI и поддерживайте схему как контракт между всеми слоями.

Часто задаваемые вопросы

Урок «Сквозная безопасность типов: процесс от схемы» бесплатный?

Да — полный текст урока «Сквозная безопасность типов: процесс от схемы» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс TypeScript Academy, подпишись на CoddyKit PRO. Курс TypeScript Academy содержит 4 уроков всего.

Чему я научусь в уроке «Сквозная безопасность типов: процесс от схемы»?

Поддерживайте единый источник истины — от схемы до клиента Ты практикуешь TypeScript Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать TypeScript Academy?

Предыдущий опыт не требуется. TypeScript Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 4 из 4.

Сколько времени занимает урок «Сквозная безопасность типов: процесс от схемы»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке TypeScript Academy?

Да. Каждый урок TypeScript Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Схема GraphQL в типы TypeScript
  2. Типизированные резолверы с GraphQL Code Generator
  3. Типизированный клиент GraphQL с Apollo и urql
  4. Сквозная безопасность типов: процесс от схемы
← Назад к TypeScript Academy