Навіщо потрібен TypeScript і чому він такий популярний? Пояснюємо просто!

Привіт усім! Сьогодні поговоримо про TypeScript. Можливо, ви чули цю назву, особливо якщо цікавитеся веб-розробкою або готуєтеся до співбесіди. Але що це таке і навіщо воно взагалі потрібно, якщо вже є JavaScript? Давайте розбиратися!

Уявіть, що ви будуєте з LEGO…

Уявіть, що JavaScript — це величезна коробка LEGO, де всі цеглинки перемішані. Ви можете будувати що завгодно! Але іноді ви берете круглу цеглинку, хоча потрібна була квадратна, або намагаєтеся прикріпити маленьку деталь туди, де має бути велика. Помилку ви помітите лише тоді, коли конструкція почне розвалюватися або виглядатиме дивно. Це весело для маленьких проєктів, але уявіть, що ви будуєте величезний замок чи космічний корабель — помилки можуть коштувати дорого!

TypeScript — це як ті самі LEGO, але:

  1. Кожен тип цеглинок (квадратні, круглі, довгі, короткі) лежить в окремій підписаній коробці.
  2. У вас є інструкція (або розумний помічник), яка підказує, яку саме цеглинку потрібно взяти для конкретного кроку, і не дає приєднати круглу деталь до місця для квадратної.

Звучить корисніше для великих будівель, правда?

Що таке TypeScript насправді?

Якщо технічно, то TypeScript — це надмножина (superset) JavaScript. Це означає, що будь-який код на JavaScript вже є валідним кодом на TypeScript. Але TypeScript додає дещо дуже важливе поверх JavaScript: статичну типізацію.

Проблема: Гнучкість JavaScript, яка може стати хаосом

JavaScript — мова з динамічною типізацією. Це означає, що тип змінної визначається під час виконання програми, і він може змінюватися.

JavaScript

// JavaScript
let мояЗмінна = 10; // Зараз тут число
console.log(мояЗмінна * 2); // Виведе 20

мояЗмінна = "Привіт!"; // Оп, а тепер тут рядок!
console.log(мояЗмінна.toUpperCase()); // Виведе "ПРИВІТ!"

// А якщо так?
мояЗмінна = 100;
// ... багато коду ...
мояЗмінна = "Сто";
// ... ще багато коду ...
console.log(мояЗмінна / 10); // Упс! Помилка під час виконання! (NaN - Not a Number)

У маленькому скрипті це не страшно. Але в проєкті на тисячі рядків коду, де працює команда розробників, такі “сюрпризи” призводять до:

  1. Помилок під час виконання: Користувач бачить збій або несподівану поведінку програми. Знайти причину буває складно.
  2. Складності розуміння коду: Не завжди очевидно, якого типу дані очікує функція або що вона повертає. Доводиться “вгадувати” або довго розбиратися.
  3. Проблем при рефакторингу: Змінюючи частину коду, легко зламати щось інше, не помітивши цього одразу.
  4. Ускладнення командної роботи: Різні розробники можуть по-різному інтерпретувати, які дані де мають бути.

Рішення: TypeScript та його статична типізація

TypeScript вирішує ці проблеми, дозволяючи (і заохочуючи) розробників явно вказувати типи даних для змінних, параметрів функцій та значень, що повертаються.

TypeScript

// TypeScript
let мояЗміннаTS: number = 10; // Ми сказали: тут ЗАВЖДИ буде число!
console.log(мояЗміннаTS * 2); // OK, виведе 20

// Спробуємо присвоїти рядок:
// мояЗміннаTS = "Привіт!"; // ПОМИЛКА! TypeScript не дозволить це зробити ще на етапі написання коду!

let іншаЗмінна: string; // Оголосили змінну, яка буде рядком
іншаЗмінна = "Все добре";
console.log(іншаЗмінна.toUpperCase()); // OK

// Якщо функція очікує число:
function подвоїти(число: number): number {
  // ": number" після дужок означає, що функція ПОВИННА повернути число
  return число * 2;
}

console.log(подвоїти(5)); // OK, виведе 10
// console.log(подвоїти("п'ять")); // ПОМИЛКА! Функція чекає число, а не рядок.

Як бачите, TypeScript перевіряє типи до того, як ви запустите код (на етапі компіляції/перевірки). Це схоже на перевірку орфографії в текстовому редакторі — ви бачите помилку одразу.

Головні переваги TypeScript:

  1. Раннє виявлення помилок: Більшість помилок, пов’язаних з типами (як у прикладі мояЗмінна / 10), відловлюються ще на етапі розробки, а не в браузері користувача. Це економить купу часу та нервів.
  2. Покращена читабельність та розуміння коду: Коли ви бачите function getUser(userId: number): User, ви одразу розумієте: функція приймає числовий ID і повертає об’єкт типу User. Типи слугують як документація.
  3. Краща підтримка інструментів розробки (IDE): Редактори коду (VS Code, WebStorm тощо) використовують інформацію про типи для надання точніших підказок (автодоповнення), навігації по коду та рефакторингу.
  4. Спрощення командної роботи та підтримки: Чіткі “контракти” (типи) між різними частинами коду полегшують інтеграцію роботи різних розробників та підтримку проєкту в довгостроковій перспективі.
  5. Можливість використовувати найновіші фічі JavaScript: TypeScript часто підтримує нові можливості JavaScript ще до того, як вони стануть доступними у всіх браузерах, компілюючи їх у старішу, сумісну версію JS.

Чи складно перейти на TypeScript?

Якщо ви вже знаєте JavaScript, вивчити TypeScript не так вже й складно. Основна концепція — це додавання типів. Ви можете почати поступово, додаючи типи до існуючого JS-коду. Важливо пам’ятати, що весь TypeScript-код компілюється (перетворюється) у звичайний JavaScript, який потім виконується в браузері або на сервері (Node.js). Браузери не розуміють TypeScript напряму.

Висновок

TypeScript — це не заміна JavaScript, а його потужне доповнення. Він додає систему типів, яка допомагає писати надійніший, зрозуміліший та легший у підтримці код, особливо у великих та складних проєктах. Це як додати інструкції та сортувальні коробки до вашого набору LEGO — будувати стає набагато простіше та передбачуваніше. Саме тому TypeScript став таким популярним інструментом у сучасній веб-розробці та частою вимогою на співбесідах.

Сподіваюся, тепер вам стало зрозуміліше, навіщо потрібен TypeScript! Успіхів у навчанні та кодуванні!

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *