Будущее Javascript: типы, наконец, могут появиться в Javascript

Будущее Javascript: типы, наконец, могут появиться в Javascript

9 апреля 2022 г.

С повышением уровня аннотаций типов до стадии Proposal Level 1 Javascript стал на один шаг ближе к тому, чтобы стать языком с более строгой типизацией. Давайте углубимся в то, что эти изменения будут означать для Javascript.


Типы в Javascript


Javascript динамически типизирован. Это означает, что он определяет тип чего-либо по месту его появления. Например:


```javascript


пусть х = 1; // тип "число"


пусть у = "1"; // тип "строка"


В сложных приложениях и системах это огромная слабость. Приложения могут давать сбои из-за мельчайших вещей, например, из-за того, что ваш API возвращает «false» вместо «false».


Это означает, что иногда нам приходится защищать наш код, делая такие глупости, особенно в тех случаях, когда у нас нет контроля над программным обеспечением, отправляющим обратно неверные типы:


```javascript


если (х === истина || х === "истина") {


// это верно


Это огромное раздражение для опытных программистов, но для новичков Javascript — подарок. Javascript позволяет так легко писать довольно сложные вещи простым способом. Если ваш код неверен, Javascript обычно находит способ заставить его работать. Большинство разработчиков Javascript обнаруживают, что гибкость, которую они любят в начале, вскоре становится неприятной, когда они становятся более компетентными в языке.


По этим причинам никогда не было сильного стремления сделать Javascript типизированным языком с жесткими правилами. Доступность Javascript — одна из его замечательных черт, а добавление типов не только усложнит работу для начинающих, но и потенциально сломает многие существующие веб-технологии, основанные на нетипизированном Javascript.


Поэтому вместо них были разработаны дополнительные пакеты — TypeScript и Flow — два из самых известных. Они берут Javascript и превращают его в язык со строго объявленными типами.


Введите: Типы Javascript


В новом предложении по аннотациям типов делается попытка найти золотую середину, чтобы Javascript оставался доступным, но с большей легкостью позволял использовать расширенные функции, такие как типы.


В некотором смысле это было неизбежно. Строгие типы неизменно выходят на первое место среди наиболее востребованных функций Javascript для разработчиков:


Наиболее востребованные функции Javascript


Как будут работать аннотации типов


Для ясности, аннотации типов не сделают Javascript строго типизированным языком. Вместо этого они позволяют Javascript работать с типами. Это означает, что если вы добавите типы в Javascript после того, как эта спецификация достигнет стадии реализации, они будут просто проигнорированы. Однако если вы скомпилируете его с помощью Typescript, типы будут работать как обычно.


Если вы раньше использовали TypeScript, вы будете знакомы с тем, как выглядят аннотации типов. Например, определение типа переменной выглядит так:


```javascript


пусть х: строка = "Строка";


пусть х:число = 5;


Как Javascript будет работать после аннотаций типов


Допустим, вы пишете кусок кода, который выглядит так:


```javascript


пусть х = "Строка";


консоль.лог(х);


Позже вы решите, что хотите добавить типы. Вместо того, чтобы компилировать его с помощью TypeScript, с аннотациями типов мы можем просто добавить типы в наш файл Javascript:


```javascript


пусть х: строка = "Строка";


консоль.лог(х);


В этом случае :string просто игнорируется Javascript, что означает, что он остается совместимым с нетипизированным Javascript и пакетами типов, такими как TypeScript. Это означает, что вы можете создать его с помощью TypeScript, но вы также можете просто запустить его как обычный файл .js. Типы в ванильном файле Javascript в конечном итоге являются комментариями.


Другие примеры типов в аннотациях типов


Общий список ожидаемых типов можно найти в аннотациях типов. Например -


интерфейсы:


```javascript


имя интерфейса {


имя: строка,


фамилия: строка


типы союзов:


```javascript


проверка функции (x: строка | число) {


консоль.лог(х);


универсальные типы:


```javascript


введите Test = T[];


пусть x:Test<число> = [ 1, 2, 3, 4 ];


Обоснование аннотаций типов


Основная причина заключается в том, что по мере того, как разработка браузеров становилась все более упорядоченной, а серверные экосистемы Javascript, такие как Deno и Node.JS, становились все более популярными, у Javascript были возможности переходить на все меньше и меньше шагов сборки. Большое изменение происходит с TypeScript, где для запуска файла TypeScript нам нужно собрать его обратно в Javascript. Очевидно, что это трудоемкий и иногда обременительный шаг для разработчиков и определенно ограничивает эффективность.


Одним из основных преимуществ аннотаций типов в TypeScript является то, что они удаляют еще один этап сборки. Нативный TypeScript можно запускать в браузере без необходимости преобразовывать его обратно в Javascript, что значительно оптимизирует работу разработчиков.


Кроме того, этот тип аннотаций дает стандартную основу для определений типов в Javascript. Стандартизируя наиболее согласованные части типов в Javascript, он обеспечивает согласованность между всеми компиляторами типов, упрощая работу разработчиков.


Вывод


В заключение, типы приходят в Javascript, но, возможно, не так, как люди себе представляли. Javascript останется языком с динамической типизацией, но он изначально будет принимать объявления типов. Эта спецификация все еще находится на этапе 1, поэтому многое может измениться, но для Javascript настало захватывающее время сделать первый шаг в мир более строго типизированного.



Оригинал
PREVIOUS ARTICLE
NEXT ARTICLE