Classes
Classes
Причина, чому важливо мати класи в JavaScript як елемент першого класу, полягає в тому, що:
Забезпечують послідовний спосіб для розробників використовувати класи замість кожного фреймворку (emberjs, reactjs тощо), створюючи власну версію.
Об'єктно-орієнтовані розробники вже розуміють класи
Нарешті розробники JavaScript можуть мати class
. Як приклад, ми маємо базовий клас під назвою Point:
Цей клас генерує наступний JavaScript, грунтуючись на ES5:
Це досить ідіоматичний традиційний шаблон класу JavaScript, який тепер є мовною конструкцією першого класу.
Inheritance
Наслідування.
Класи в TypeScript (як і в інших мовах) підтримують single наслудування (у класа може бути ліше один батьківський клас) за допомогою ключового слова extends
, як показано нижче:
Якщо у вашому класі є конструктор, ви повинні викликати батьківський конструктор із свого конструктора (TypeScript вкаже вам на це). Це гарантує, що все, що потрібно для існування класу та ініціалізації this
, буде встановлено. Після виклику super
ви можете додати будь-які додаткові речі, які ви хочете зробити у вашому конструкторі (тут ми додаємо ще один член z
). Зауважте, що ви легко замінюєте батьківські функції-члени (тут ми перевизначаємо add
) і все ще використовуємо функціональність суперкласу у своїх членах (використовуючи синтаксис super.
).
Statics
Статичні властивості класу.
Класи TypeScript підтримують статичні властивості, які є спільними для всіх екземплярів класу. Природним місцем для їх розміщення (і доступу) є сам клас, і саме це робить TypeScript:
Ви можете мати як статичні члени, так і статичні функції.
Access Modifiers
Модифікатори доступу.
TypeScript підтримує модифікатори доступу public
(публічний),private
(приватний) та protected
(захищений), які визначають доступність члена класу , як показано нижче:
доступні для
public
protected
private
клас
так
ні
так
дочерний клас
так
так
ні
екземпляр класу
так
ні
ні
Якщо модифікатор доступу не вказано, він неявно відкритий, оскільки це відповідає зручному характеру JavaScript 🌹.
Зверніть увагу, що під час виконання (у згенерованому JS) вони не мають значення, але викличуть помилки під час компіляції, якщо ви використовуєте їх неправильно. Приклад кожного показаний нижче:
Як завжди, ці модифікатори працюють як для властивостей члена, так і для функцій члена.
Abstract
Абстрактний клас.
abstract
можна розглядати як модифікатор доступу. Ми представляємо його окремо, тому що, на відміну від згаданих раніше модифікаторів, він може бути як у class
, так і в будь-якому члені класу. Наявність abstract
модифікатора в першу чергу означає, що така функціональність не може бути безпосередньо викликана , і дочірній клас повинен надавати цю функціональність.
Ми не можемо створити екземпляр
abstract
classes. Замість цього користувач повинен створити якийсьclass
, який наслідує відabstract class
неможливо отримати прямий доступ до
abstract
members, тому дочірній клас повинен забезпечувати цю функціональність.
Constructor is optional
Конструктор класу необов'язковий.
Клас не потребує наявності конструктора. наприклад, наступне цілком нормально. Якщо не створити конструктор власноруч, TypeScript зробить конструктор за замовчуванням
Define using constructor
Визначення властивості за допомогою конструктора.
Наявність члена в класі та його ініціалізація, як показано нижче:
є настільки поширеним шаблоном, що TypeScript надає скорочення, де ви можете додати до члена access modifier, і він автоматично оголошується в класі та копіюється з конструктора. Тож попередній приклад можна переписати таким чином (зверніть увагу на public x:numbe
r ):
Property initializer
Ініціалізатор властивості.
Це чудова функція, яка підтримується TypeScript (з ES7). Ви можете ініціалізувати будь-який член класу поза конструктором класу, що корисно для встановлення значення за замовчуванням (зверніть увагу на number = []
)
Last updated