Сквозная безопасность типов: процесс от схемы
Поддерживайте единый источник истины — от схемы до клиента
«Сквозная безопасность типов: процесс от схемы» — бесплатный урок 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 schemaCI: полный конвейер безопасности схемы
Полный конвейер 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 — локальная установка не требуется.
Все уроки этого курса
- Схема GraphQL в типы TypeScript
- Типизированные резолверы с GraphQL Code Generator
- Типизированный клиент GraphQL с Apollo и urql
- Сквозная безопасность типов: процесс от схемы