Статический ввод не для всех!

Как использовать статический ввод

TypeScript обеспечивает синергию команде

«Организованность - признак самоуважения». - Габби Бернштейн

Вся идея программирования на JavaScript заключается в понимании системы. Один из ключевых признаков хорошего программиста - всегда знать, с какими типами он работает. Мы постоянно корректируем стиль кодирования, чтобы сделать наши переменные и их типы более очевидными.

Что дает статическая типизация?

До 2012 года мы использовали JavaScript без какого-либо синтаксического сахара. В 2012 году TypeScript (сокр. TS) был представлен Microsoft как новый инструмент, расширяющий JavaScript, добавляя типы в язык. Основная цель TS - ограничить виды значений, которые могут использоваться для сравнения типов.

Я думаю, что добавление статической типизации может улучшить качество вашего кода независимо от того, нравится вам это или нет. Если вы не любитель статической печати, попробуйте ЛИНТЕР. Это отличный инструмент, который дает вам возможность решить, какое правило будет применяться.

Опытный разработчик может предпочесть ЛИНТЕР, учитывая его настраиваемый характер. Вы легко поймете все, что не хотите делать. Вы можете создать мощный плагин, который может решить большинство ошибок. Помните, что с помощью этого инструмента невозможно предотвратить логические ошибки.

ЛИНТЕР - идеальный инструмент, когда вы работаете самостоятельно. Но что, если вы являетесь частью команды? Команда должна будет демократическим путем решить, какой инструмент подходит. Нет инструмента, который подходил бы для каждой команды. Как видите, здесь нет места отдельным диктаторам, которые решают за всех!

На мой взгляд, такие инструменты статической печати, как TypeScript и Flow, являются отличными инструментами, и я рад, что они существуют. Я ими не пользовался, так как не работал в команде. Мне они лично не нужны, потому что они решают проблемы, которых у меня нет. Все дело в перспективе.

Я не сказал, что не использую TS, потому что у меня нет препятствий. Однако я решаю эти проблемы иначе. Здесь могут быть некоторые сложности, поскольку TS - это абстракция, и вы не узнаете, как движок JavaScript работает за кулисами. На мой взгляд, я не люблю пользоваться системой, которую не понимаю.

Если мы хотим обсудить TypeScript, сначала мы объясним преимущества использования системы статической типизации:

  1. TypeScript будет выявлять ошибки, связанные с типом. Это необходимо, чтобы избежать ошибок типа. Каждый разработчик хочет иметь инструмент, который понимает его намерения, чтобы помочь ему сделать это правильно.
  2. TypeScript очень умен, когда подходит к выводу типов. Мы можем сказать, что это помогает нам писать код, который больше подходит для других разработчиков. Основное предназначение этой системы - это то, что мы называем аннотациями типов - функция, построенная на основе кода JavaScript.
  3. Самое интересное - это возможность войти в исходный код. Я знаю, что это обычное дело для программного обеспечения с открытым исходным кодом, но полная мощность отображается, если мы начинаем использовать файлы Определение типов. Мы можем просмотреть эти файлы и понять, как работает библиотека, которую мы используем - нам даже не нужно использовать документы.
  4. Благодаря этой замечательной функции определения типов мы можем анализировать экосистему инструментов, которая может отображаться в нашей среде IDE. Не забывайте о функции автозаполнения и возможности принять объектно-ориентированную парадигму.
  5. Интеграция TypeScript в IDE впечатляет, особенно в Visual Studio Code. Вы должны иметь в виду, что и VS Code, и TypeScript являются продуктами Microsoft.

TypeScript - не единственный инструмент, который предоставляет эти замечательные функции. Я упоминал Flow ранее. Flow - проект, запущенный Facebook еще в 2014 году. Это не принято в сообществе, как TypeScript, но я не сомневаюсь, что скоро он станет достойным конкурентом.

Всегда есть обратная сторона!

Как и у любой системы, у TypeScript тоже есть свои предостережения. Я сказал, что вывод типов - один из самых сильных козырей этой системы. Но это алгоритм, который зависит от некоторых параметров. Мы не можем полностью полагаться на него, поскольку это своего рода догадка, а не гарантия.

Мы не можем быть уверены в том, что произойдет во время компиляции. В этом случае ваша способность спроектировать систему выходит на первый план. Если у вас плохой дизайн и вы позволяете системе определять типы, вы можете не получить от этого никаких преимуществ. Если система не может угадать тип переменной, она установит для него значение по умолчанию - any.

Если TS не может угадать тип, это означает, что у нас проблема. Это может привести к плохой практике, поскольку TypeScript рекомендует избегать значений, помеченных как тип any. Если вам нравится работать с любым типом, система набора текста бесполезна, потому что то же самое достигается с помощью чистого JavaScript.

Возможно, вы не из мира TypeScript и не понимаете, о чем я говорю, поэтому я приведу простой пример:

Как мы видим, Type Inference угадывает тип на основе инициализации массива. Отныне этот массив может только содержать числа:

Видите ли, мы не можем добавить строку или любой другой тип в массив, только числа. Все будет беспорядочно, если мы сделаем следующее:

Система не может угадать, что мы пытаемся сделать, потому что мы инициализируем пустой массив. В этом случае TypeScript установит значение по умолчанию, равное any. Чтобы решить эту проблему, мы должны аннотировать тип:

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