- можливість явного визначення типів (статична типізація);
- підтримка використання повноцінних класів (як і традиційна об'єктно-орієнтована модель);
- підтримка підключення модулів.
Node.js як TypeScript-компілятор
Користуватися ним просто. Створюємо простий файл з TypeScript-кодом (hello.ts):
Тепер компіляція. Набираємо в консолі:
Результатом буде файл hello.js:
Чи не забагато відмінностей, правда? Ну, тепер, коли у нас все працює, давайте розберемося з самим мовою.
анотації типів
Що нам може запропонувати TypeScript? Перш за все статичну типізацію, ми її спостерігали в першому ж прикладі:
Тип даних тут вказано після імені аргументу. Якщо ми передамо функції невірний тип даних, при компіляції буде видано попередження:
Можна вказати тип значення:
А можна взагалі нічого не вказувати - сувора типізація не є в TypeScript обов'язковою. Зате функції тепер можна задавати параметри за замовчуванням і вказувати необов'язкові аргументи:
Класи! Справжні класи!
Готові посперечатися, заради того все і затівалося. Так, в TypeScript існують «нормальні» класи і «нормальне» успадкування. Приклад TypeScript-класу:
Тут майже все, про що мріяли прихильники «традиційного» ООП: поля, методи, конструктор. Є і модифікатори доступу - спроба отримати значення User.id або встановити його значення безпосередньо, а не за допомогою спеціальних методів класу Person, зазнає невдачі (модифікатор public теж є, але його майже завжди можна опустити).
Статичні поля і властивості також підкоряються звичним законам - тобто доступні без створення екземпляра класу.
Тепер успадкування. Напишемо ще один клас, який розширює попередній:
Ми додали трохи - назва групи. У конструкторі ми методом super () викликаємо батьківський конструктор.
Можна перевизначити батьківський метод:
інтерфейси
Так, крім класів, в TypeScript існують і ці корисні мовні конструкції. Нижче приклад простого інтерфейсу і використовує його функції:
Модулі в TypeScript організовані за стандартами CommonJS і EcmaScript6. Їх завдання - інкапсуляція бізнес-логіки в окремій конструкції зі своїм простором імен ... Хоча, що пояснювати, що таке модулі в кінці статті про Node.js? Краще покажу на практиці, як вони реалізовані в TypeScript.
Нічого не нагадує? Хоча що, власне, нагадувати, це не подібність, це той же самий механізм, який ми використовуємо, наприклад, в Node.js. При компіляції отримуємо наступне: