Запропонувати правкуПокращити цю статтюДопрацюйте відповідь до «Що робить ключове слово type?». Ваші зміни проходять модерацію перед публікацією.Потрібне підтвердженняКонтентЩо ви змінюєте🇺🇸EN🇺🇦UAПереглядЗаголовок (UA)Коротка відповідь (UA)Ключове слово **type** використовується для створення псевдонімів типів (type aliases) - тобто ти можеш дати ім'я будь-якому типу (примітиву, об'єкту, об'єднанню, функції, масиву тощо), щоб перевикористовувати його і робити код зрозумілішим. **Ключове:** це працює тільки на рівні компіляції і не створює новий тип даних у JS.Показується над повною відповіддю для швидкого нагадування.Відповідь (UA)Зображення### Що робить ключове слово `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) |Для рев’юераПримітка для модератора (необов’язково)Бачить лише модератор. Прискорює рев’ю.