Skip to main content

Що робить ключове слово type?

Що робить ключове слово type у TypeScript

Ключове слово type використовується для створення псевдонімів типів (type aliases). Тобто ти можеш дати ім'я будь-якому типу (примітиву, об'єкту, об'єднанню, функції, масиву тощо), щоб перевикористовувати його і зробити код зрозумілішим.


Простими словами

type - це спосіб визначити свій власний тип на основі наявних.

javascript
type UserID = number; type UserName = string;

Тепер їх можна використовувати в інших типах:

javascript
type User = { id: UserID; name: UserName; };

Приклад: псевдонім примітивного типу

javascript
type Age = number; let myAge: Age = 25;

Це не створює новий тип даних у JS - це лише для перевірки типів під час компіляції.


Приклад: об'єктний тип

javascript
type User = { id: number; name: string; isAdmin?: boolean; // необов'язкова властивість }; const user: User = { id: 1, name: "Tim", };

Можна задавати властивості, опціональні поля (?) та вкладені типи.


Приклад: об'єднання типів (union)

javascript
type Status = "loading" | "success" | "error"; let currentStatus: Status = "loading"; currentStatus = "error"; // допустимо currentStatus = "done"; // Помилка

Дуже зручно, коли потрібно обмежити допустимі значення (аналог enum, але простіше).


Приклад: перетин типів (intersection)

Можна об'єднати кілька типів в один:

javascript
type Person = { name: string }; type Contact = { email: string }; type Employee = Person & Contact; const worker: Employee = { name: "Alex", email: "alex@example.com", };

Приклад: типізація функцій

javascript
type Logger = (message: string, level?: "info" | "error") => void; const log: Logger = (msg, level = "info") => { console.log(`[${level}] ${msg}`); };

Приклад: типізація масивів та об'єктів

javascript
type IDList = number[]; const ids: IDList = [1, 2, 3];

або

javascript
type Dictionary = Record<string, number>; const scores: Dictionary = { math: 95, physics: 90, };

type vs interface

Особливістьtypeinterface
Можна описувати об'єктитактак
Можна об'єднувати через &такнемає (лише extends)
Можна описувати об'єднання (A | B)такні
Можна описувати примітиви, функції, tuple тощотакні
Можна розширювати (extends)лише через &так
Можна повторно оголошувати та розширюватинітак

Приклад:

javascript
type A = { a: number }; type B = { b: string }; type AB = A & B; // { a: number; b: string } interface IA { a: number; } interface IB extends IA { b: string; }

Рекомендація:

  • Використовуй type - для об'єднань, функцій, tuple, union.
  • Використовуй interface - для структур даних (наприклад, об'єктів, API-моделей).

Приклад: type + as const

javascript
const ROLES = ["admin", "user", "guest"] as const; type Role = typeof ROLES[number]; // "admin" | "user" | "guest" let myRole: Role = "admin"; // допустимо

Підсумок

ВластивістьОпис
ПризначенняСтворення користувацьких псевдонімів типів
Працює на рівніКомпіляції (не існує в JS)
ПідтримуєПримітиви, функції, об'єкти, об'єднання, перетини
Використовується дляПовторного використання і читабельності коду
Аналог у JSНемає (це лише для TypeScript)

Коротка відповідь

Для співбесіди
Premium

Коротка відповідь допоможе вам впевнено відповідати на цю тему під час співбесіди.