Вот мы подошли к основной части статьи, где рассмотрим ряд свойств, при реализации которых разработчики 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, то здесь декораторы находятся на втором этапе предложения и пока не включены в стандарт.