0Pricing
TypeScript Academy · Урок

Конфигурация с проверкой по схеме

Проверяйте конфигурацию при запуске с помощью схемы

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

Проверка конфигурации при запуске

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

Что означает немедленное завершение при ошибке

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

Схема с Zod

Библиотеки вроде zod позволяют декларативно описывать конфигурацию. Каждое поле задаёт свой тип и ограничения, а проверка создаёт полностью типизированный объект.

import { z } from "zod";
const EnvSchema = z.object({
  PORT: z.coerce.number().int().positive(),
  NODE_ENV: z.enum(["development", "production"]),
  DATABASE_URL: z.string().url(),
});

Встроенное приведение типов

Схемы могут приводить строки к нужным типам. z.coerce.number() превращает "8081" в 8081, поэтому исходные строки окружения безопасно становятся настоящими числами.

// "8081" -> 8081 via z.coerce.number()

Разбор и немедленное завершение при ошибке

Вызов parse проверяет всё сразу. Если что-либо недействительно, zod выдаёт подробную ошибку, которую можно записать в журнал и использовать для завершения процесса, немедленно останавливая запуск.

function loadConfig() {
  const result = EnvSchema.safeParse(process.env);
  if (!result.success) {
    console.error(result.error.format());
    process.exit(1);
  }
  return result.data;
}

Выведение типа

Огромное преимущество состоит в том, что проверенный тип выводится из схемы с помощью z.infer. Схема становится единым источником истины и для проверок во время выполнения, и для типов во время компиляции.

type Env = z.infer<typeof EnvSchema>;
// { PORT: number; NODE_ENV: "development" | "production"; DATABASE_URL: string }

Подробные сообщения об ошибках

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

// e.g. { PORT: { _errors: ["Expected number, received nan"] } }

Необязательные поля и значения по умолчанию

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

const Schema = z.object({
  LOG_LEVEL: z.enum(["info", "debug"]).default("info"),
  TIMEOUT_MS: z.coerce.number().optional(),
});

Проверить один раз, использовать везде

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

export const config = loadConfig();

Не только Env: файлы и аргументы

Та же схема может проверять конфигурацию из JSON-файла или объединённых источников, а не только из process.env. Этап проверки не зависит от происхождения значений.

Почему схемы лучше разрозненных проверок

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

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

Краткая проверка по этому уроку.

Итоги

Схема config (например, zod) в одном месте объявляет типы, ограничения, приведение типов и значения по умолчанию, проверяет их при запуске и обеспечивает немедленное завершение при ошибке с подробными сообщениями, а также позволяет вывести типизированную конфигурацию с помощью z.infer из этого единого источника истины.

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

Урок «Конфигурация с проверкой по схеме» бесплатный?

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

Чему я научусь в уроке «Конфигурация с проверкой по схеме»?

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

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

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

Сколько времени занимает урок «Конфигурация с проверкой по схеме»?

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

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

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

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

  1. Типизация переменных окружения
  2. Конфигурация с проверкой по схеме
  3. Слои конфигурации и значения по умолчанию
  4. Секреты и типобезопасность
← Назад к TypeScript Academy