Литеральные типы
Часть раздела Введение в TypeScript путешествия по JavaScript на Coddy — урок 33 из 73.
Литеральные типы позволяют ограничить переменную точными, конкретными значениями, а не широкими категориями. Вместо того чтобы принимать любую строку, вы можете ограничить её только "left", "right", "up" или "down".
Литеральный тип использует точное значение в качестве самого типа.
Вы можете создавать литеральные типы для строк, чисел или логических значений:
let direction: "left" = "left"; // Разрешено только "left"
let count: 42 = 42; // Разрешено только число 42
let isReady: true = true; // Разрешено только trueЛитеральные типы становятся мощным инструментом в сочетании с типами объединения (union types), создавая контролируемый набор допустимых значений. Это идеально подходит для таких сценариев, как направления, коды состояния или параметры конфигурации:
type Direction = "left" | "right" | "up" | "down";
type Status = "pending" | "approved" | "rejected";
let playerMove: Direction = "up"; // Допустимо
let orderStatus: Status = "pending"; // Допустимо
// let invalid: Direction = "diagonal"; // Ошибка!Этот подход дает вам гибкость множества вариантов, сохраняя при этом строгую типизацию. TypeScript будет отлавливать опечатки и недопустимые значения на этапе компиляции, делая ваш код более надежным, чем при использовании общих строковых типов.
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Задание
ЛегкоСоздайте псевдоним типа с именем Direction для литеральных типов "left" | "right" | "up" | "down".
Создайте псевдоним типа с именем GameState для литеральных типов "menu" | "playing" | "paused" | "gameover".
Создайте псевдоним типа с именем Difficulty для литеральных типов "easy" | "medium" | "hard".
Теперь объявите следующие переменные, используя ваши псевдонимы типов:
- Объявите переменную с именем
playerDirectionтипаDirectionи присвойте ей значение"up" - Объявите переменную с именем
currentStateтипаGameStateи присвойте ей значение"playing" - Объявите переменную с именем
selectedDifficultyтипаDifficultyи присвойте ей значение"medium"
Создайте функцию с именем movePlayer, которая принимает параметр direction типа Direction и возвращает string. Функция должна возвращать сообщение в формате "Moving [direction]".
Создайте еще одну функцию с именем updateGameState, которая принимает параметр state типа GameState и возвращает string. Функция должна возвращать сообщение в формате "Game state: [state]".
Вызовите ваши функции с созданными переменными и выведите результаты:
- Вызовите
movePlayerсplayerDirectionи выведите результат - Вызовите
updateGameStateсcurrentStateи выведите результат - Выведите значение
selectedDifficulty
Выведите каждый результат на отдельной строке в указанном выше порядке.
Шпаргалка
Литеральные типы ограничивают переменные точными, конкретными значениями, а не широкими категориями:
let direction: "left" = "left"; // Разрешено только "left"
let count: 42 = 42; // Разрешено только число 42
let isReady: true = true; // Разрешено только trueКомбинируйте литеральные типы с типами объединения (union types), чтобы создавать контролируемые наборы допустимых значений:
type Direction = "left" | "right" | "up" | "down";
type Status = "pending" | "approved" | "rejected";
let playerMove: Direction = "up"; // Допустимо
let orderStatus: Status = "pending"; // ДопустимоЭто обеспечивает типобезопасность, выявляя опечатки и недопустимые значения на этапе компиляции, сохраняя при этом гибкость за счет нескольких вариантов.
Попробуйте сами
// TODO: Напишите свой код здесь
// Создайте псевдонимы типов для Direction, GameState и Difficulty
// Объявите переменные, используя ваши псевдонимы типов
// Создайте функции movePlayer и updateGameState
// Вызовите функции и выведите результатыВ этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Введение в TypeScript
1Начало работы с TS
Что такое TypeScript?Зачем использовать TypeScript?Ваш первый код на TypeScriptПроцесс компиляции и ошибкиИтоги: Введение в TS4Работа с функциями
Типизация параметров и возвращаемых значенийТипизация стрелочных функцийТип возвращаемого значения 'void'Необязательные параметры с '?'Значения параметров по умолчаниюТипизация Rest-параметровОпределение типов функцийИтоги: Создание типизированных функций2Основные типы
Базовые типы: str, num, booleanТип 'any': лазейкаТип 'unknown'Работа с 'null' и 'undef'Вывод типов в действииЯвные аннотации типовИтоги: Практика по основным типам5Типы: псевдонимы, объединения и пересечения
Псевдонимы типов для примитивовТипы объединения ('|')Работа с типами объединенияЛитеральные типыТипы пересечения ('&')Комбинирование псевдонимов типовИтоги: продвинутые комбинации типов3Структуры данных: массивы и кортежи
Типизированные массивыМодификатор 'readonly' для массивовЧто такое кортеж?Объявление кортежей и доступ к нимДеструктуризация кортежейКортежи readonlyМногомерные типизированные массивыОператор spread с массивамиИтоги: массивы и кортежи