Запропонувати правкуПокращити цю статтюДопрацюйте відповідь до «Успадкування типу та інтерфейсу». Ваші зміни проходять модерацію перед публікацією.Потрібне підтвердженняКонтентЩо ви змінюєте🇺🇸EN🇺🇦UAПереглядЗаголовок (UA)Коротка відповідь (UA)**Тип (type)** не може напряму успадкувати інтерфейс через `extends`, але може розширити його через перетин (`&`), що по суті еквівалентно успадкуванню. **Інтерфейс**, навпаки, може успадкувати тип через `extends`, але лише якщо тип описує об'єкт. **Ключове:** напрямок `type → interface` працює тільки через `&`, а `interface → type` - напряму через `extends`, якщо тип об'єктний.Показується над повною відповіддю для швидкого нагадування.Відповідь (UA)Зображення### 1. Чи може **тип (type)** успадкувати **інтерфейс**? **Ні, напряму не може.** Типи (`type`) не підтримують ключове слово `extends` під час створення, тобто не можна написати так: ```javascript interface A { name: string; } type B extends A = { age: number }; // Помилка ``` Але можна **об'єднати тип та інтерфейс через перетин (**`&`**)**, що по суті **еквівалентно успадкуванню**: ```javascript interface A { name: string; } type B = A & { age: number }; // Працює ``` Таким чином, **тип не "успадковує" інтерфейс**, але **може його розширити** за допомогою `&`. --- ### 2. Чи може **інтерфейс** успадкувати **тип**? **Так, якщо тип - об'єктна структура.** TypeScript дозволяє інтерфейсу успадковувати тип через `extends`, **але лише якщо тип описує об'єкт** (а не примітив, union тощо): ```javascript type A = { name: string }; interface B extends A { age: number; } const obj: B = { name: "Tim", age: 25 }; // Працює ``` Але якщо тип не є об'єктом (наприклад, union або примітив), буде помилка: ```javascript type C = string | number; interface D extends C {} // Помилка: інтерфейс може успадковувати лише об'єктні типи ``` --- ### Підсумок | Варіант | Чи можна успадкувати? | Приклад | Альтернатива | |---|---|---|---| | **type → interface** | Ні, напряму | `type B extends A` (помилка) | `type B = A & { ... }` (працює) | | **interface → type** | Так, якщо type - об'єкт | `interface B extends A {}` (працює) | - |Для рев’юераПримітка для модератора (необов’язково)Бачить лише модератор. Прискорює рев’ю.