Як JavaScript перетворюється на TypeScript, і чого чекати у майбутньому
Досвідчені розробники, напевно, помітили, що багато нових функцій, які з'являються в мові JavaScript, раніше вже були реалізовані в TypeScript. Звичайно, мова не про пряме копіювання, але відчутний вплив TS на JS все-таки простежується.
У цій статті ми розглянемо, як ці мови стають все більш схожими, і чому JavaScript ніколи не перетвориться на TS. Але для початку зробимо невеликий огляд кожної технології.
JavaScript
Вважається найпопулярнішою та широко використовуваною мовою у світі. Вона незмінно застосовується у веб-розробці та робить сторінки сайту інтерактивними. Як і будь-яка популярна технологія, JS постійно розвивається та росте за допомогою оновлень. Наприклад, у червні 2020 року відбувся реліз нової версії JavaScript: ECMAScript – ES2020.
TypeScript
Був розроблений корпорацією Microsoft у 2012 році. За деякими даними, він був створений для того, щоб розширити можливості JavaScript, в який він зрештою і компілюється. Сьогодні технологія активно розвивається та нарощує популярність серед веб-девелоперів.
Раніше у співтоваристві програмістів TS асоціювався з платформою Angular, створеною в Google, і не безпідставно, адже з деяких причин вона змушена використовувати саме TypeScript.
Яка мова популярніша
В останній рік популярність TS дещо знизилася - у 2020 році він увійшов до четвірки найбільш затребуваних мов, а за підсумками 2021 - скотився на 6-е місце. Однак, до популярності JavaScript йому все ще дуже далеко.
У будь-якому випадку, у обох мов є своя власна аудиторія і, щоб продовжувати успішно розвиватися, їм потрібно впроваджувати новий функціонал та забезпечити своїх розробників найновішими та найкращими інструментами, незважаючи на те, у кого вони з'явилися першими.
Що JavaScript запозичив у TS
Ось ми підійшли до основної частини статті, де розглянемо ряд властивостей, при реалізації яких розробники JS, ймовірно, надихалися TypeScript
Класи
Можливість використовувати класи JavaScript з'явилася лише в релізі ES6, завдяки концепту прототипного успадкування - відразу після реалізації такої функції в TS. При цьому в JS вона є не більш ніж синтаксичною конструкцією, через що мову складно назвати об'єктно-орієнтованою у чистому вигляді.
Однак, творці TS зробили практично те саме. Їхня варіація, як і традиційний JS, має таке ж прототипне успадкування. Просто вони використовували підтримку програмування з використанням класів у майбутньому запропоновану ECMAScript. Тому тут не можна сказати, що відбувся очевидний вплив однієї мови на іншу.
Приватні змінні
Це ще одна функція, що відповідає парадигмі ООП, але перш ніж вона з'явилася у JavaScript, аналогічні змінні були представлені мовою TypeScript. У його варіанті визначення таких змінних засноване на використанні ключового слова private, що дуже схоже на їхнє застосування в інших мовах ООП.
Тим часом у JS приватні змінні поки що знаходяться на 3 стадії розробки стандарту ТС39, а отже мають стати доступні девелоперам вже найближчим часом. Відомо, що вони оголошуватимуться в коді за допомогою спеціального символу #.
Починаючи з патча 3.8, TypeScript став підтримувати так званий приватний підхід. Тобто це «керована приватність», яка дає користувачеві можливість легально оминати відсутність доступу до будь-якого API та працювати з різними періодами виконання софту.
У той же час символ #, який пропонується ECMAScript, є абсолютно недоступним поза своїм класом. І в цьому є свої плюси, оскільки стійка конфіденційність може гарантувати, що ніхто не матиме можливості використовувати жодні внутрішні змінні. Це безпосередньо позначається на безпеці програми.
Оператор нульового злиття
У TypeScript функція Nullish Coalescing з'явилася у версії 3.7, яка вийшла в 2019 році, а через рік вона була впроваджена в JavaScript, разом з релізом ES2020. Це дуже схоже, що розробники JS почерпнули інноваційну ідею саме в TS.
Нагадаємо, що оператор нульового злиття ?? У процесі перевірки змінної вважає false лише два значення: null або undefined. У той самий час звичайні логічні оператори призводять до false низку значень: 0, undefined, null, false і NaN. Розробникам-початківцям може здатися, що ця різниця незначна, але на практиці вона просто величезна.
Опціональний ланцюжок
З 2019 року цією функцією можуть користуватися розробники TypeScript, а ось JS-девелоперам вона стала доступною лише починаючи з релізу ES2020, який вийшов у 2020 році.
Опціональний ланцюжок є найпростішою функцією, яка надає безпечний доступ до властивостей вкладених об'єктів, навіть якщо якесь із проміжних значень не існує. Тобто при її використанні не потрібно навіть перевіряти існування кожного з них.
Фактично використання оператора дуже схоже із застосуванням стандартного точкового оператора. Ключова відмінність між ними полягає в тому, що якщо перед ним значення undefined або null, опціональний ланцюжок поверне не помилку, а undefined.
Таким чином, у розробника з'являється простий і читабельний код, в якому при виклику об'єктів гарантовано не вискакують помилки.
Декоратори
Напевно, вам в коді зустрічалися такі позначення як @Injectable або @Directive. Це є декоратори. Вони є дуже зручними функціями і, насправді, використовуються вже досить давно. Наприклад, у Angular перед компонентами обов'язково стоїть позначення @Component.
У TS функція використовується як експериментальна, і щоб почати її використовувати, потрібно надати доступ у файлі конфігурації tsconfig.json. Що стосується JS, то тут декоратори знаходяться на другому етапі пропозиції і поки що не включені до стандарту.
Майбутні зміни у мовах
Розвиток JavaScript та TypeScript не зупиняється, тому в найближчому майбутньому в мовах можуть з'явитися нові функції. Про них також варто сказати кілька слів.
Інтерфейс
На даний момент інтерфейси JS не підтримуються за замовчуванням. Більше того, мова поки що працює на основі об'єктів, а не успадкування класів, причому сама поява в синтаксисі слова class існує для створення відчуття їхнього використання.
Така функція впроваджується JavaScript-девелоперами на основі концепту під назвою Duck Typing - що в перекладі означає "качина типізація". Для її реалізації було створено окремі бібліотеки, наприклад, такі, як implement.js.
При цьому мати таку функцію за умовчанням було б зовсім непогано, і творці JS могли б використовувати так званий синтаксичний цукор для реалізації цієї ідеї.
Простір імен
Досить корисна функція в TS, яка схожа на заповнювачі в C# і пакети в Java, а ось в JS вона за замовчуванням не використовується. Тут для її реалізації розробникам доводиться застосовувати кілька патернів проектування за допомогою об'єктів та замикань.
Звичайно, назвати простір імен найбільш довгоочікуваною функцією JavaScript досить складно, але її реалізація навряд чи викличе великі труднощі у команди розробників мови, тому в майбутньому вона може з'явитися.
Протягом 3-5 днів з вами зв'яжеться
наш менеджер для уточнення деталей
та узгодження дати проведення співбесіди
Spacelab
Курс недоступний
Увага! Даний курс у розробці, заявки не приймаються до відкриття реєстраціі.
За оновленнями слідкуйте на сайті, у розділі «Курси»
або у телеграм - каналі
https://t.me/spacelab_avadamedia