
Изучение преимуществ использования псевдонимов типов в TypeScript
type alias — отличный способ улучшить читаемость и удобство сопровождения кода. Это позволяет вам дать новое более описательное имя существующему типу.
Например, представьте, что вы определяете следующий интерфейс:
interface Smoothie {
experationDate: Date;
milkType: string;
includesProtein: boolean;
fruit: string[];
}
Есть несколько способов улучшить этот интерфейс с помощью type alias.
Например, мы могли бы присвоить type alias типу Date, а type alias присвоить нашему полю experationDate.
type SmoothieExperationDate = Date;
interface Smoothie {
experationDate: SmoothieExperationDate;
milkType: string;
includesProtein: boolean;
fruit: string[];
}
Но это еще не все! Другой способ, которым мы можем использовать type alias в TypeScript, — использовать его для связывания нескольких параметров типа под одним псевдонимом. По сути, мы использовали бы union type.
union type позволяет переменной быть одного из нескольких типов. Синтаксис type1 | type2 | type2 .
То, как мы присвоили бы union type type alias, было бы таким.
type SmoothieExperationDate = Date | number | string;
Теперь вместо того, чтобы разрешать только полю experationDate содержать значение Date, теперь его также можно определить как number или string .
Давайте еще немного улучшим наш интерфейс Smoothie.
Вероятно, мы хотим создать ограничение для значений, которые можно указать в поле milk. Один из способов сделать это - создать перечисление
enum Milk {
Oat,
Coconut,
2%,
Whole
}
Но перечисления в конечном итоге добавляются к нашему коду времени выполнения. Поэтому, чтобы предотвратить это, мы можем вместо этого создать псевдоним для молока!
type Milk = "oat" | "coconut" | "2%" | "whole";
Мы можем сделать то же самое для нашего поля fruit
type Fruit = "bananas" | "strawberries" | "blueberries" | "mango"
Так что теперь наш интерфейс выглядит так:
interface Smoothie {
experationDate: SmoothieExperationDate;
milkType: Milk;
includesProtein: boolean;
fruit: Fruit[];
}
Теперь предположим, что мы хотим расширить этот Smoothieinterface, чтобы иметь возможность создавать EnergizerSmoothie . Чтобы сделать EnergizerSmoothie, нам нужно расширить интерфейс Espresso следующим образом:
interface Expresso {
name: string;
beans: string;
shotCount: number;
strength: number;
};
interface EnergizerSmoothie extends Smoothie, Espresso {};
Но мы также можем использовать type alias для этого:
type EnergizerSmoothie = Smoothie & Espresso
В отличие от синтаксиса канала |, который предоставляет альтернативные типы, использование синтаксиса аперсанда & позволяет нам объединить два типа вместе для создания нового типа!
Итак, как видите, type alias — это мощный инструмент, который обязательно произведет впечатление на любого, кто просматривает ваш код. Я призываю вас попробовать это в вашем предстоящем проекте TypeScript.