Стендап Сьогодні 📢 Канал в Telegram @stendap_sogodni
🤖🚫 AI-free content. This post is 100% written by a human, as is everything on my blog. Enjoy!04.10.2022
Нюанси міграції на TypeScript
☕🪟✨ Сьогодні довелося відповісти на пару питань про міграцію на TypeScript.
До своєї статті про перехід на TypeScript можу додати ще пару пунктів.
-
TypeScript - це все ж таки не “JavaScript з типами”, а мова, що семантично відрізняється. На TypeScript є власні ідіоми, які в JavaScript не поширені. Тобто при переході доведеться навчитися писати код по-іншому. Бо, з протилежного боку, деякий ідіоматичний код JS погано типізується і буде псувати все враження від TypeScript. А ще це значить, що деякий код набагато простіше переписати, ніж покрити типами.
-
Наприклад: випадки з невизначеним життєвим циклом змінних (або властивостей обʼєкта.) В JS ми просто приймаємо на віру, що присвоєння значення відбувається до його використання. TS з таким не погодиться, і вимагатиме, щоб при кожному звертанні до змінної ми перевіряли, чи вона має значення. Тут доцільно вжити discriminated union чи ізолювати змінні по меншім функціям.
-
JS побудований навколо парадигми “аби працювало, щоб ти не написав”. Звідси походять всі WAT та інше. В TS навпаки, тип завжди відомий, тому не потрібно стільки вгадувати значення та захищатись від несподіванок. Як плата за це, потрібно робити перевірки на коректність коду, які в JS здаються непотрібними - наприклад, про наявність індексу в масиві чи обʼєкті. Треба розуміти, що це і є цінність і мета використання TypeScript, і перевірки дозволяють уникнути помилок в крайових випадках, коли вони трапляться.
-
З чого почати типізацію? Моя порада — почніть з найпростіших типів. Зазвичай це значить почати з моделі та з маленьких функцій. Ще можна досить легко перекласти prop types для React до типів. До речі, потім prop types можна викинути.
-
Якщо десь не вдається розкласти по типах — то може бути й таке, що пора переписувати. А для цього краще мати добрі тести.
-
Не соромтеся оголошувати прості маленькі типи замість копіпасти, якщо декілька функцій чи компонент працюють з однаковими конструкціями.