String Literal Types

Тренажер по TypeScript для пользователей с начальным уровнем подготовки.

Тренажер по TypeScript

В TypeScript тип string позволяет хранить любую строку. Но что, если переменная должна принимать только ограниченный набор значений, например, только 'up', 'down', 'left' или 'right'? Здесь на помощь приходят String Literal Types.

Синтаксис позволяет определить тип как конкретную строку: type Direction = 'up' | 'down';. Теперь, если вы попытаетесь присвоить такой переменной значение 'diagonal', онлайн компилятор выдаст ошибку. Это работает как строгий список допустимых значений (enum), но без дополнительного синтаксиса перечислений.

Такой подход незаменим при настройке конфигураций, обработке событий и описании состояний интерфейса. В этих задачах вы научитесь создавать литеральные типы, объединять их через оператор | и применять для валидации входных данных функций.

Список тем

1. Объявление литерального типа

id: 40665_ts_str_lit_replace_01

В этом задании вам предстоит объявить строковый литеральный тип в TypeScript. Строковые литеральные типы позволяют задать точное значение строки, которое может принять переменная. Объявите тип с именем Status, который может быть только одним из двух значений: 'success' или 'error'. В первом пропуске введите строковый литерал 'success', во втором - 'error'. Обратите внимание, что строковые литералы должны быть заключены в кавычки (одинарные или двойные). После правильного заполнения пропусков код будет корректно объявлять тип Status, который можно использовать для переменных, принимающих только указанные значения.

Заполните пропуски
// Объявите тип Status, который может быть только 'success' или 'error'
type Status = input1S | input2S;
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

2. Валидация значений

id: 40665_ts_str_lit_sort_02

Перед вами список строковых значений. Разнесите их по двум категориям: Valid (значения, которые соответствуют строковому литеральному типу `type Easing = 'ease-in' | 'ease-out'`) и Invalid (значения, которые не соответствуют этому типу из-за опечаток, лишних символов или других отличий). Обратите внимание, что строковые литеральные типы в TypeScript требуют точного совпадения, включая регистр и все символы.

Перетяните элементы в соответствующие блоки
Valid
Invalid
'ease-in'
'ease-out'
'easein'
'easeout'
'ease-in-out'
'ease'
'EASE-IN'
'ease-out '
Сообщения
Проверить
Показать подсказку

3. Опечатка в присваивании

id: 40665_ts_str_lit_error_03

В этом фрагменте TypeScript-кода используется строковый литеральный тип для определения допустимых значений цвета. Однако при присваивании значения переменной допущена ошибка в регистре строки, что приведет к ошибке компиляции. Исправьте строку с присваиванием, чтобы код стал корректным и соответствовал объявленному типу, устранив опечатку в регистре.

Найдите ошибку и исправьте
type Color = 'red' | 'green' | 'blue';
 
let myColor: Color = 'Red'; // Здесь ошибка в регистре
console.log(myColor);
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

4. Выбор аргумента

id: 40665_ts_str_lit_select_fill_04

В этом задании вам предстоит заполнить пропуски в коде TypeScript, выбирая допустимые строковые значения для вызова функции, которая использует литеральные строковые типы. Функция `alignText` принимает только определённые значения выравнивания текста. Ваша задача — подобрать правильные аргументы из выпадающего списка, чтобы код работал корректно и соответствовал комментариям.

Нужно правильно расставить в пропуски предложенные варианты
function alignText(alignment: 'left' | 'center' | 'right'): string {
    return `Text aligned to ${alignment}`;
}

// Выравниваем по левому краю
console.log(alignText(input1S));
// Выравниваем по центру
console.log(alignText(input2S));
// Выравниваем по правому краю
console.log(alignText(input3S));
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

5. Светофор

id: 40665_ts_str_lit_build_05

Из предложенных строк соберите корректное определение типа TypeScript, которое создаёт строковый литеральный тип TrafficLight, принимающий значения 'red', 'green' и 'yellow'. Игнорируйте лишние строки, которые не относятся к определению этого типа. Значения литералов должны идти в указанном порядке: 'red', затем 'green', затем 'yellow'.

Перетяните в правильном порядке строки из одного блока в другой
type
TrafficLight
=
'red'
|
'green'
|
'yellow'
interface TrafficLight {
'blue'
&
string
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

6. Сравнение типов

id: 40665_ts_str_lit_predict_06

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

Выберите правильный вариант ответа
type Direction = "north" | "south" | "east" | "west";
let currentDirection: Direction = "north";

if (currentDirection === "up") {
    console.log("Moving up");
}
Сообщения
Проверить
Показать подсказку

7. Компоненты объединения

id: 40665_ts_str_lit_highlight_07

Разметьте все элементы в объявлении типа Event. Укажите для каждого выделенного фрагмента, является ли он ключевым словом, именем типа, оператором присваивания, строковым литералом или оператором объединения. Это упражнение поможет закрепить понимание структуры объявлений с литеральными типами в TypeScript.

Кликните по каждому выделенному фрагменту и выберите для него подходящий тип из списка под текстом.
{{type~|~t1}} {{Event~|~t2}} {{=~|~t3}} {{'click'~|~t4}} {{|~|~t5}} {{'hover'~|~t6}} {{|~|~t7}} {{'drag'~|~t8}} {{|~|~t9}} {{'drop'~|~t10}};
Имя типа
Оператор объединения
Ключевое слово
Строковый литерал
Оператор присваивания
Сообщения
Проверить
Показать подсказку

TypeScript: компиляция и запуск

id: 40665_compiler

Демо по строковым литеральным типам в TypeScript: вы задаёте набор допустимых строк (например, "GET" | "POST") и получаете подсказки компилятора при ошибках. Попробуйте менять значения переменных и аргументы функций: поставьте неверный метод или статус — и посмотрите, где TypeScript ругается. Поэкспериментируйте: добавьте новый метод (например, "PATCH"), новый статус или новый «режим» и убедитесь, как меняются подсказки и проверки. В конце есть пример «неправильного» подхода со string — сравните, как легко туда проскальзывает ошибка.

TS
Запустить тренажёр (TypeScript)
НайтиКурс.Ру