0Pricing
TypeScript Academy · Урок

Утверждения 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: readonly

as 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 — локальная установка не требуется.

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

  1. Механика расширения и сужения типов
  2. Контекстная типизация: вывод из контекста
  3. Свежесть и проверка лишних свойств
  4. Утверждения const и as const
← Назад к TypeScript Academy