Литеральные типы строк и чисел
Ограничивайте значения точными строками и числами с помощью литеральных типов
«Литеральные типы строк и чисел» — бесплатный урок 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 — локальная установка не требуется.
Все уроки этого курса
- Литеральные типы строк и чисел
- Логические литералы и вывод литеральных типов
- Утверждения const с помощью as const
- Объединение литералов в объединения