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