Особенность enum в TypeScript заключается в том, что он создает не только JavaScript-объект с данными, но и одноименный тип.
Вы можете использовать имя перечисления в аннотациях типов для переменных, аргументов функций и возвращаемых значений. Это гарантирует, что в переменную попадет только одно из значений, перечисленных в enum.
enum Status { Active, Inactive }
function setStatus(s: Status) { ... }
Этот урок покажет, как использовать Enum в качестве типа данных, ограничивая возможные значения переменных и повышая надежность кода.
- Модуль 1: Введение в TypeScript
- Модуль 2: Примитивные типы
- Модуль 3: Специальные типы
- Модуль 4: Массивы
- Модуль 5: Кортежи (Tuples)
- Модуль 6: Объекты
- Модуль 7: Функции
- Модуль 8: Union типы
- Модуль 9: Литеральные типы
- Модуль 10: Type Aliases
- Модуль 11: Интерфейсы
- Модуль 12: Type Guards и Narrowing
- Модуль 13: Enums
- Модуль 14: Классы
- Модуль 15: Generics — основы
- Модуль 16: Generics — ограничения
- Модуль 17: Utility Types — базовые
- Модуль 18: Utility Types — работа с Union
- Модуль 19: Utility Types — функции
- Модуль 20: Type Assertions
- Модуль 21: Keyof и Typeof операторы
- Модуль 22: Mapped Types
- Модуль 23: Conditional Types
- Модуль 24: Discriminated Unions
- Модуль 25: Модули и типы
- Модуль 26: Declaration Files
- Модуль 27: Типизация асинхронного кода
- Модуль 28: Практические паттерны
1. Аннотация аргумента
В этом задании вам нужно использовать перечисление (enum) в качестве типа для параметра функции. В коде уже определен enum Status с двумя значениями: Active и Inactive. Вам необходимо указать тип параметра s в функции setStatus, используя имя этого перечисления. Заполните пропуск в коде, чтобы функция могла принимать только значения из enum Status.
enum Status {
Active,
Inactive
}
function setStatus(s: input1S) {
console.log(s);
}
setStatus(Status.Active);2. Где тип, а где значение?
Перед вами фрагмент кода на TypeScript, содержащий объявление перечисления (enum) и его использование. Внимательно изучите код. Ваша задача — кликнуть на все места, где имя этого перечисления используется именно как ТИП (для аннотации типа переменной, параметра функции или возвращаемого значения). Не отмечайте места, где перечисление используется как значение (например, при обращении к его членам через точку) или где оно объявляется.
enum {{Color~|~t0}} {
Red,
Green,
Blue
}
let {{favoriteColor~|~t1}}: {{Color~|~t2}} = {{Color~|~t3}}.Green;
let {{defaultColor~|~t4}}: {{Color~|~t5}} = {{Color~|~t6}}.Red;
function getColorName({{c~|~t7}}: {{Color~|~t8}}): string {
switch ({{c~|~t9}}) {
case {{Color~|~t10}}.Red: return "Red";
case {{Color~|~t11}}.Green: return "Green";
default: return "Blue";
}
}
const {{currentColor~|~t12}}: {{Color~|~t13}} = {{Color~|~t14}}.Blue;3. Совместимость типов
Проанализируйте приведённый фрагмент кода на TypeScript. Обратите внимание на определение числового enum и попытку присвоить переменной этого типа числовое значение, которое не содержится в перечислении. Учитывая, что используется строгая типизация TypeScript, определите, что произойдёт при компиляции этого кода.
enum Status {
Active = 1,
Inactive = 2
}
let currentStatus: Status;
currentStatus = 5; // Эта строка вызовет ошибку компиляции?4. Выбор поля из типа
В данном фрагменте кода TypeScript определён enum Color. Необходимо правильно типизировать поле color в интерфейсе Car, а затем присвоить этому полю значение из enum. Для заполнения пропусков используйте выпадающие списки. Обратите внимание, что поле color должно иметь тип Color и принимать одно из значений этого enum.
enum Color {
Red,
Green,
Blue
}
interface Car {
brand: string;
color: input1S;
}
const myCar: Car = {
brand: 'Toyota',
color: input2S
};5. Неверное присваивание
В данном фрагменте TypeScript-кода допущена ошибка при присваивании значения переменной, тип которой указан как Enum. Переменной пытаются присвоить строковый литерал, который внешне похож на ключ Enum, но не является корректным значением этого типа. Исправьте строку с ошибкой, чтобы код стал рабочим и типобезопасным.
enum Status { Active, Inactive, Pending}let currentStatus: Status = "Active";6. Логика проверки типа
Проанализируйте TypeScript-код сверху и восстановите последовательность логических шагов выполнения программы. Шаги снизу перемешаны — расставьте их в правильном порядке, чтобы отразить, как программа обрабатывает входное значение Enum и что выводит в консоль.
enum Status {
Active = 'ACTIVE',
Inactive = 'INACTIVE',
Pending = 'PENDING'
}
function checkStatus(status: Status): string {
switch (status) {
case Status.Active:
return 'Статус активен';
case Status.Inactive:
return 'Статус неактивен';
case Status.Pending:
return 'Статус в ожидании';
default:
return 'Неизвестный статус';
}
}
const currentStatus: Status = Status.Active;
console.log(checkStatus(currentStatus));