
Будущее 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 после того, как эта спецификация достигнет стадии реализации, они будут просто проигнорированы. Однако если вы скомпилируете его с помощью Typescript, типы будут работать как обычно.
Если вы раньше использовали TypeScript, вы будете знакомы с тем, как выглядят аннотации типов. Например, определение типа переменной выглядит так:
```javascript
пусть х: строка = "Строка";
пусть х:число = 5;
Как Javascript будет работать после аннотаций типов
Допустим, вы пишете кусок кода, который выглядит так:
```javascript
пусть х = "Строка";
консоль.лог(х);
Позже вы решите, что хотите добавить типы. Вместо того, чтобы компилировать его с помощью TypeScript, с аннотациями типов мы можем просто добавить типы в наш файл Javascript:
```javascript
пусть х: строка = "Строка";
консоль.лог(х);
В этом случае :string
просто игнорируется Javascript, что означает, что он остается совместимым с нетипизированным Javascript и пакетами типов, такими как TypeScript. Это означает, что вы можете создать его с помощью TypeScript, но вы также можете просто запустить его как обычный файл .js
. Типы в ванильном файле Javascript в конечном итоге являются комментариями.
Другие примеры типов в аннотациях типов
Общий список ожидаемых типов можно найти в аннотациях типов. Например -
интерфейсы:
```javascript
имя интерфейса {
имя: строка,
фамилия: строка
типы союзов:
```javascript
проверка функции (x: строка | число) {
консоль.лог(х);
универсальные типы:
```javascript
введите Test
пусть x:Test<число> = [ 1, 2, 3, 4 ];
Обоснование аннотаций типов
Основная причина заключается в том, что по мере того, как разработка браузеров становилась все более упорядоченной, а серверные экосистемы Javascript, такие как Deno и Node.JS, становились все более популярными, у Javascript были возможности переходить на все меньше и меньше шагов сборки. Большое изменение происходит с TypeScript, где для запуска файла TypeScript нам нужно собрать его обратно в Javascript. Очевидно, что это трудоемкий и иногда обременительный шаг для разработчиков и определенно ограничивает эффективность.
Одним из основных преимуществ аннотаций типов в TypeScript является то, что они удаляют еще один этап сборки. Нативный TypeScript можно запускать в браузере без необходимости преобразовывать его обратно в Javascript, что значительно оптимизирует работу разработчиков.
Кроме того, этот тип аннотаций дает стандартную основу для определений типов в Javascript. Стандартизируя наиболее согласованные части типов в Javascript, он обеспечивает согласованность между всеми компиляторами типов, упрощая работу разработчиков.
Вывод
В заключение, типы приходят в Javascript, но, возможно, не так, как люди себе представляли. Javascript останется языком с динамической типизацией, но он изначально будет принимать объявления типов. Эта спецификация все еще находится на этапе 1, поэтому многое может измениться, но для Javascript настало захватывающее время сделать первый шаг в мир более строго типизированного.
Оригинал