Number Literal Types

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

Тренажер по TypeScript

Литеральные типы (Literal Types) позволяют сузить множество допустимых значений переменной не просто до «числа», а до конкретных чисел. Например, тип let dice: 1 | 2 | 3 | 4 | 5 | 6; разрешает переменной принимать только одно из указанных целых чисел.

Это удобно для описания фиксированных констант, статус-кодов ответов сервера, уровней доступа или настроек анимации. В сочетании с объединением типов (Union Types), числовые литералы создают очень строгую и надежную типизацию. В этих заданиях вы научитесь ограничивать переменные конкретными числовыми значениями.

Список тем

1. Объявление литерала

id: 40666_num_lit_01_replace

В этом задании вам нужно объявить тип переменной rating, который будет принимать только конкретные числовые значения: 1, 2 или 3. Используйте литеральные типы TypeScript и оператор объединения (|) для создания такого ограниченного типа. Затем присвойте переменной допустимое значение и выведите его в консоль. Заполните пропуски в коде так, чтобы он корректно компилировался и выполнялся.

Заполните пропуски
let rating: input1S;
rating = input2S;
console.log(rating);
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

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

id: 40666_num_lit_02_sort

Перед вами список числовых литералов. Разнесите их по двум категориям: 'Подходит' и 'Ошибка компиляции'. Категория 'Подходит' предназначена для чисел, которые соответствуют типу `Fibonacci`, определённому как `type Fibonacci = 1 | 2 | 3 | 5 | 8`. Категория 'Ошибка компиляции' предназначена для чисел, которые не входят в этот тип и при попытке присвоения переменной типа `Fibonacci` приведут к ошибке компиляции. Обратите внимание, что тип `Fibonacci` является объединением литеральных числовых типов, поэтому только указанные числа допустимы.

Перетяните элементы в соответствующие блоки
Подходит
Ошибка компиляции
1
2
3
4
5
6
8
13
Сообщения
Проверить
Показать подсказку

3. Выход за границы

id: 40666_num_lit_03_error

В этом фрагменте TypeScript-кода допущена ошибка, связанная с использованием литеральных числовых типов. Переменной, которая может принимать только значения 0 или 1, присваивается недопустимое значение. Найдите строку с ошибкой и исправьте присваивание на одно из допустимых значений, чтобы код стал корректным.

Найдите ошибку и исправьте
let statusCode: 0 | 1;
statusCode = 2;
console.log(statusCode);
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

4. Функция перемещения

id: 40666_num_lit_04_select

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

Нужно правильно расставить в пропуски предложенные варианты
let position = 0;

function move(direction: input1S) {
  position += direction;
  return position;
}

const newPosition = move(1);
console.log(newPosition);
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

5. Поиск литералов

id: 40666_num_lit_05_click

Внимательно изучите приведённый фрагмент кода на TypeScript. Ваша задача — найти и выделить кликом все места, где используются числовые литеральные типы (конкретные числовые значения, выступающие в роли типа). Не отмечайте общий тип number, переменные, значения, присваиваемые переменным, или любые другие элементы кода, не являющиеся числовыми литеральными типами. Всего нужно найти и выделить 6 элементов.

Кликните по всем фрагментам, которые подходят под условие задания.
type StatusCode = {{200~|~t1}} | {{404~|~t2}} | {{500~|~t3}};
let ok: {{200~|~t4}} = {{200~|~t7}};
let notFound: StatusCode = {{404~|~t8}};
let serverError: {{500~|~t5}} = {{500~|~t9}};
let anyNumber: {{number~|~t10}} = {{1000~|~t11}};
let another: {{200~|~t6}} = {{200~|~t12}};
Сообщения
Проверить
Показать подсказку

6. Сборка типа статуса

id: 40666_num_lit_06_build

Из предложенных строк соберите корректное определение типа HTTPStatus, который представляет собой объединение числовых литералов 200, 404 и 500. Лишние строки в решение включать не нужно. Убедитесь, что синтаксис TypeScript соблюдён, и тип объявлен корректно.

Перетяните в правильном порядке строки из одного блока в другой
type HTTPStatus = 
200
 | 404
 | 500;
type Status = 
 | 300
let status: HTTPStatus;
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

7. Сравнение литералов

id: 40666_num_lit_07_give_result

Проанализируйте приведённый код на TypeScript. Функция `processValue` принимает аргумент, который может быть только числом 1 или 2 (литеральный тип). Внутри функции используется оператор `switch` для определения возвращаемого значения. Что будет выведено в консоль при вызове функции с аргументом 2? Введите ответ в поле ниже (одно слово или число, в зависимости от того, что возвращает функция).

Что должно получиться?
function processValue(value: 1 | 2): string {
    let result: string;
    switch (value) {
        case 1:
            result = "один";
            break;
        case 2:
            result = "два";
            break;
        default:
            result = "неизвестно";
    }
    return result;
}

const output = processValue(2);
console.log(output);
Сообщения
Проверить
Показать подсказку

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

id: 40666_compiler

Числовые литеральные типы позволяют ограничить переменную конкретными числовыми значениями. В примере показано, как создать тип для HTTP-кодов и дней недели. Попробуйте присвоить переменной httpCode значение 999 или dayOfWeek значение 8 — TypeScript сразу покажет ошибку! Экспериментируйте: создайте свой литеральный тип для оценок (1-5) или месяцев (1-12). Измените функцию roll(), чтобы она возвращала результат броска двух кубиков.

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