Изучение преимуществ использования псевдонимов типов в 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.