Утверждения const и as const
Используйте as const для точного вывода литеральных типов и типов кортежей
«Утверждения const и as const» — бесплатный урок TypeScript Academy на CoddyKit. Это урок 4 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения TypeScript Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс TypeScript Academy содержит 4 уроков всего.
Что такое as const?
as const — это утверждение типа, которое указывает TypeScript выводить для выражения максимально конкретные литеральные типы и делать все свойства доступными только для чтения.
const colors = ["red", "green", "blue"] as const;
// type: readonly ["red", "green", "blue"]Предотвращение расширения с помощью as const
Без as const строковые значения в массивах и объектах расширяются до string. С ним они сохраняют свои литеральные типы.
const dir1 = { direction: "left" };
// dir1.direction: string
const dir2 = { direction: "left" } as const;
// dir2.direction: "left"as const для литералов объектов
Каждое свойство объекта с as const становится readonly и рекурсивно сохраняет свой литеральный тип.
const theme = {
color: "dark",
sizes: { sm: 8, md: 16 },
} as const;
// theme.color: "dark", theme.sizes.sm: 8 (all readonly)as const для типов кортежей
Массивы с as const превращаются в кортежи readonly с литеральными типами элементов — это удобно для определения фиксированных списков аргументов.
const args = [1, "hello", true] as const;
// type: readonly [1, "hello", true]Вывод типов объединения из as const
Распространённый шаблон: определите массив значений с помощью as const, а затем выведите тип объединения из него, используя typeof и индексированный доступ.
const STATUSES = ["pending", "active", "done"] as const;
type Status = typeof STATUSES[number];
// type Status = "pending" | "active" | "done"as const в аргументах функций
Можно использовать as const непосредственно при вызове функций, чтобы сохранить литеральные типы при передаче аргументов.
function setMode(mode: "dark" | "light") {}
setMode("dark" as const); // safe, preserves literalРекурсивное применение readonly
as const рекурсивно применяет Readonly. Вложенные объекты и массивы становятся readonly, что предотвращает глубокие изменения.
const config = { db: { host: "localhost", port: 5432 } } as const;
// config.db.port = 5433; // Error: readonlyas const и Object.freeze
as const — это утверждение во время компиляции, не обеспечивающее защиту во время выполнения. Object.freeze действует во время выполнения. Эти средства дополняют друг друга.
const obj = Object.freeze({ x: 1 }); // runtime immutability
const obj2 = { x: 1 } as const; // compile-time literal typesКонстантные утверждения и аннотации типов
Аннотация типа расширяет тип: const x: string = "hi" получает тип string. as const сужает тип: const x = "hi" as const получает тип "hi".
const a: string = "hi"; // type: string
const b = "hi" as const; // type: "hi"Практическое применение: объекты, подобные перечислениям
Во многих кодовых базах объекты с as const используют как альтернативу перечислениям, избегая недостатков перечислений и сохраняя безопасность типов.
const Direction = { Up: "UP", Down: "DOWN" } as const;
type Direction = typeof Direction[keyof typeof Direction];
// "UP" | "DOWN"Итоги: as const
as const заставляет TypeScript выводить литеральные типы и считать все свойства доступными только для чтения. Это необходимо для получения точных объединённых типов из массивов и создания безопасных объектов конфигурации.
Быстрая проверка
Что делает as const с массивом?
Чему Вы научились
as const — мощный инструмент для фиксации литеральных типов, создания структур, доступных только для чтения, и получения точных объединённых типов из массивов. Это основа продвинутых шаблонов TypeScript.
Часто задаваемые вопросы
Урок «Утверждения const и as const» бесплатный?
Да — полный текст урока «Утверждения const и as const» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс TypeScript Academy, подпишись на CoddyKit PRO. Курс TypeScript Academy содержит 4 уроков всего.
Чему я научусь в уроке «Утверждения const и as const»?
Используйте as const для точного вывода литеральных типов и типов кортежей Ты практикуешь TypeScript Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать TypeScript Academy?
Предыдущий опыт не требуется. TypeScript Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 4 из 4.
Сколько времени занимает урок «Утверждения const и as const»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке TypeScript Academy?
Да. Каждый урок TypeScript Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Механика расширения и сужения типов
- Контекстная типизация: вывод из контекста
- Свежесть и проверка лишних свойств
- Утверждения const и as const