0Pricing
TypeScript Academy · Урок

Литеральные типы строк и чисел

Ограничивайте значения точными строками и числами с помощью литеральных типов

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

Что такое литеральный тип?

Большинство типов описывают множество значений. string означает любую строку, а number — любое число. Литеральный тип сужает это множество до одного точного значения.

Тип 'north' разрешает только строку 'north' — и ничего другого. Литеральные типы позволяют описывать точные конечные множества допустимых значений прямо в системе типов.

let dir: 'north' = 'north';
console.log(dir);
// dir = 'south'; // Error: not assignable to type 'north'

Объединения строковых литералов

Отдельный литерал сам по себе не очень полезен. Объедините несколько литералов с помощью |, чтобы создать объединение литералов. Это принятый способ описывать фиксированный набор вариантов.

Приведённое ниже Direction может иметь только одну из четырёх точных строк.

type Direction = 'north' | 'south' | 'east' | 'west';

let heading: Direction = 'east';
console.log('Heading:', heading);

heading = 'west';
console.log('Now:', heading);

Отклонение недопустимых значений

Преимущество объединений литералов в том, что компилятор отклоняет всё, что не входит в допустимый набор. Опечатки и недопустимые варианты становятся ошибками времени компиляции, а не ошибками во время выполнения.

type Direction = 'north' | 'south' | 'east' | 'west';

let heading: Direction = 'north';
console.log(heading);
// heading = 'up'; // Error: '"up"' is not assignable to 'Direction'

Литералы как параметры функций

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

type Direction = 'north' | 'south' | 'east' | 'west';

function move(dir: Direction): string {
  return 'Moving ' + dir;
}

console.log(move('south'));
// console.log(move('left')); // Error

Числовые литеральные типы

Литеральные типы предназначены не только для строк. Можно использовать и точные числа. Классический пример — шестигранный кубик, значение грани которого должно быть одним из чисел от 1 до 6.

type Dice = 1 | 2 | 3 | 4 | 5 | 6;

function roll(): Dice {
  return (Math.floor(Math.random() * 6) + 1) as Dice;
}

console.log('Rolled:', roll());

Числовые литералы в параметрах

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

type Quality = 1 | 2 | 3;

function setQuality(level: Quality): void {
  console.log('Quality set to', level);
}

setQuality(2);
// setQuality(5); // Error: 5 is not 1 | 2 | 3

Сочетание строковых и числовых литералов

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

type Size = 'small' | 'large' | 0 | 100;

function resize(s: Size): void {
  console.log('Resizing to', s);
}

resize('small');
resize(100);

Логические литеральные типы

Даже логические значения имеют литеральные типы: true и false являются и типами, и значениями. Полный тип boolean фактически представляет собой true | false.

type AlwaysOn = true;

let enabled: AlwaysOn = true;
console.log('Enabled:', enabled);
// enabled = false; // Error: false not assignable to true

Литералы улучшают документацию

Объединение литералов одновременно служит документацией. Любой, кто прочитает type Status = 'idle' | 'loading' | 'done', сразу поймёт все возможные состояния — не нужно ничего угадывать или искать разбросанные по коду строковые значения.

type Status = 'idle' | 'loading' | 'done';

function render(s: Status): string {
  return 'State is: ' + s;
}

console.log(render('loading'));

Сочетание литералов с другими типами

В объединении можно сочетать литеральные типы с более широкими типами. Распространённый пример — 'auto' | number, означающий либо специальное ключевое слово 'auto', либо любое число.

type Width = 'auto' | number;

function setWidth(w: Width): void {
  console.log('Width:', w);
}

setWidth('auto');
setWidth(320);

Литералы как именованные константы

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

type Theme = 'light' | 'dark';

const DEFAULT_THEME: Theme = 'dark';

function applyTheme(t: Theme): void {
  console.log('Applying', t, 'theme');
}

applyTheme(DEFAULT_THEME);

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

Проверьте, насколько хорошо вы понимаете литеральные типы.

Итоги: литеральные типы

Вы узнали, что:

  • Литеральные типы представляют одно точное значение, например 'north' или 6.
  • Объединение литералов с помощью | создаёт конечное объединение допустимых значений.
  • Они работают со строками, числами и логическими значениями и могут сочетаться с более широкими типами, например 'auto' | number.
  • При использовании в качестве параметров функций они предоставляют автодополнение и отклоняют недопустимые входные значения во время компиляции.

Далее мы рассмотрим, как TypeScript выбирает между литеральными и расширенными типами.

type Direction = 'north' | 'south' | 'east' | 'west';
type Dice = 1 | 2 | 3 | 4 | 5 | 6;

function describe(d: Direction, n: Dice): string {
  return 'Go ' + d + ' ' + n + ' steps';
}

console.log(describe('north', 3));

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

Урок «Литеральные типы строк и чисел» бесплатный?

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

Чему я научусь в уроке «Литеральные типы строк и чисел»?

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

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

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

Сколько времени занимает урок «Литеральные типы строк и чисел»?

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

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

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

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

  1. Литеральные типы строк и чисел
  2. Логические литералы и вывод литеральных типов
  3. Утверждения const с помощью as const
  4. Объединение литералов в объединения
← Назад к TypeScript Academy