Що робить ключове слово 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
| Особливість | type | interface |
|---|---|---|
| Можна описувати об'єкти | так | так |
Можна об'єднувати через & | так | немає (лише 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
Коротка відповідь допоможе вам впевнено відповідати на цю тему під час співбесіди.