Ось ми підійшли до основної частини статті, де розглянемо ряд властивостей, при реалізації яких розробники 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, то тут декоратори знаходяться на другому етапі пропозиції і поки що не включені до стандарту.