Конфигурация с проверкой по схеме
Проверяйте конфигурацию при запуске с помощью схемы
«Конфигурация с проверкой по схеме» — бесплатный урок 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 — локальная установка не требуется.
Все уроки этого курса
- Типизация переменных окружения
- Конфигурация с проверкой по схеме
- Слои конфигурации и значения по умолчанию
- Секреты и типобезопасность