Изучение преимуществ использования псевдонимов типов в 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[]; }
Теперь предположим, что мы хотим расширить этот Smoothie
interface, чтобы иметь возможность создавать 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.