Преимущества TypeScript перед JavaScript очевидны для всех.

Далее следует ответ, который я написал разработчику, у которого были довольно смелые заявления о типизированных и нетипизированных приложениях JavaScript (и статических и динамически типизированных языках в целом).

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

  • Любое время, потраченное на добавление типов в код JavaScript, лучше потратить на написание тестов.
  • Нет никакой ценности, которую типы привносят в разработку приложений JavaScript, чего нельзя было бы лучше достичь каким-либо другим способом.
  • Авторам библиотек и сообществу не выгодна публикация определений типов для своих библиотек.

Первые два абзаца моего письма напрямую касаются этой статьи, которая была прислана мне как доказательство того, что статически типизированные языки не превосходят динамические. Вы можете прочитать статью здесь: https://danluu.com/empirical-pl/.

Я надеюсь, что этот открытый ответ окажется для вас полезным или полезным. Приветствую ваши мысли или ответ!

Hi,

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

В статье подчеркивается, что нет достаточных научных доказательств в пользу языков со статической типизацией и динамической типизации. Принимая это на первый взгляд, можно сделать вывод, что в любом случае нельзя быть уверенным. Лучшее положение для обитания - это положение безразличного незнания: «Ни один из них не лучше другого». Это полностью соответствует моей позиции - абсолютные утверждения о превосходстве статических или динамических языков неоправданны.

Ложная дихотомия

Как и любой другой инструмент разработки программного обеспечения, типы могут повысить ценность нашего кода и людей, которые его разрабатывают / поддерживают. Утверждения, что «типы уступают тестам» и «любое время, потраченное на написание типов, следует тратить на большее количество тестов», создают ложную дихотомию между двумя инструментами, которые лучше использовать и рассматривать совместно друг с другом. Оба они позволяют упростить понимание, разработку и сопровождение нашего кода. Знать, как и когда использовать оба этих инструмента (и другие), чтобы максимизировать эти эффекты, для конкретного проекта и команды, - это одна из задач хорошего инженера-программиста.

Ставки на ошибки высоки

Хотя может оказаться невозможным достичь научного консенсуса в отношении статических и динамических языков, я считаю, что это не мешает осознать ценность типизированного JavaScript (особенно TypeScript), который привнес в разработку приложений на JavaScript. Я пишу JavaScript уже много лет, создавая большие приложения в больших отделах и командах. Вполне возможно создавать очень большие приложения на JavaScript.

Однако также чрезвычайно сложно выявить все ошибки (особенно от более младших коллег) до того, как они попадут в рабочую среду. Исторически сложилось так, что в основном это можно было выжить - не что иное, как ошибка где-то в консоли. Однако в мире React Native или серверного JavaScript ошибка означает, что ваше приложение или сервер выйдет из строя! Предотвращение этого должно быть целью №1 инженера-программиста, и для ее достижения требуются знания и умелое использование всех инструментов, имеющихся в распоряжении инженера, включая как тесты, так и типы.

TypeScript сделал открытый исходный код лучше

Забегая вперед, я никогда не напишу еще одно приложение JavaScript без использования TypeScript.

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

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

Я не могу сказать вам, сколько времени я потратил на свою карьеру, просматривая документацию (если она вообще существует), выясняя аргументы функции и возвращаемые значения, а также выявляя ошибки использования во время выполнения. Полное устранение этих усилий (или, по крайней мере, их резкое сокращение) - настоящий подарок, который принес TypeScript, и я, например, всегда буду использовать это в своих интересах.

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

Более уравновешенная позиция

Я надеюсь, вы подумаете о том, чтобы занять новую позицию: ту, которая признает реальные преимущества типизированного JavaScript для приложений, команд и всего сообщества, особенно в отношении раннего обнаружения ошибок, повышения производительности труда разработчиков и использования инструментов. Тесты - это молоток и отвертка - не каждая проблема - это гвоздь, и не каждая проблема - винт - у вас должны быть оба инструмента на поясе. Как инженер-программист, каждый должен знать сильные и слабые стороны каждого инструмента, находящегося в его / ее распоряжении, в том числе, когда и как использовать каждый в разных проектах / командах.

Я надеюсь, что вы внимательно рассмотрите преимущества (и затраты), которые может принести выбор типизированного JavaScript для ваших будущих проектов.

Адам