В чем заключается разница между интерфейсом и типом?

  —  2 минуты

#theory#typescript#web
Читать статью в Telegram

Для меня большое удивление, что я до сих пор не смог найти нормального материала, где был бы описан этот вопрос. В этом после я планирую исправить эту несправедливость.

Тип — обозначается ключевым словом type — представляет собой либо описание структуры (объекта, функции…), либо набор других типов или структур:

typescript
1// набор типов
2type Identifier = string | boolean;
3
4// описание структуры
5type Person = {
6    name: string;
7    age: number;
8}
9
10// набор типов или структур
11type Foo = Person | string;
12

Интерфейс — обозначается ключевым словом interface — может описывать только структуры:

typescript
1interface Props {
2    title: string;
3    visible?: boolean;
4}
5

Особенности типов

  1. Только типами можно создать типы-объединения (они же union type):
typescript
1type Identifier = string | number
2type Animal = Dog | Cat
3
  1. Только типами можно создавать кортежи, фиксируя тип элемента массива по индексу и длину массива:
typescript
1type Cortage = [string, number, boolean]
2
  1. Только с помощью типов можно создавать псевдонимы (они же alias):
typescript
1type Name = string
2type Author = Name
3
  1. Типами проще и красивее создавать описание функций:
typescript
1type Foo = (a: string) => number
2
3interface Foo {
4    (a: string): number
5}
6

Особенности интерфейсов

  1. Только интерфейсы имеют перегрузку типов:
typescript
1interface Person {
2    name: string
3}
4
5interface Person {
6    age: number
7}
8
9const kate: Person = {
10    name: "Екатерина",
11    age: 24
12}
13
  1. Только интерфейсы могут быть имплементированы:
typescript
1interface Person {}
2
3class Fireman implements Person {}
4

В основном, между интерфейсом и типом больше схожестей, чем отличий. Выше я перечислил основные различия между этими двумя сущностями, которого хватит для ответа на любом собеседовании

Статья была полезной?