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

Прежде всего: что такое машинописный текст?

Typescript — это своего рода оболочка вокруг JavaScript, которая позволяет аннотировать объявления функций и переменные типами. Итак, если вы посмотрите на следующий код JavaScript, типов нет:

let car;
function getDistanceDriven(carInstance) {
  return carInstance.speed * carInstance.deltaTime;
}
console.log(getDistanceDriven({speed:5, deltaTime:10}))

Переменная «автомобиль», вероятно, относится к какому-то объекту, описывающему автомобиль. А «carInstance» звучит как еще один экземпляр автомобиля. Другими словами:

Код управляется именами.

В Typescript тот же код мог бы выглядеть так:

type Car = { speed: number; deltaTime: number };
let d: Car;
function getDistanceDriven(c: Car): number {
   return c.speed * c.deltaTime;
}
console.log(getDistanceDriven({speed:5, deltaTime:10}))

Первая строка — это так называемое определение типа. Это определяет тип с именем Car как объект с двумя свойствами: speed и deltaTime. Каждое из этих свойств аннотируется своим типом. Так, например, «скорость: число» описывает «скорость» как числовое значение.

Объявленная переменная «d» описывается как имеющая тип «Car». И, наконец, функция описывает тип своих входных аргументов, то есть «c: Car», и возвращаемое значение, которое является «числом». Таким образом, мы можем дать ему «Автомобиль», и он вернет число.

Как видите, этот код больше не управляется именем. Имена переменных даже сокращаются до бессмысленных букв, таких как «d» и «c». Конечно, я довел это до крайности, чтобы показать, что код по-прежнему остается читаемым. Мы могли бы сказать:

Код управляется типами.

Более того, добавление типов добавляет коду улучшенный уровень самодокументации. Любой, кто пытается использовать функцию getDistanceDriven, точно проинформирован о том, как ее вызывать и что ожидается в качестве возвращаемого значения. Так пусть же держит:

Код обеспечивает улучшенную самодокументацию.

Код машинописного текста обычно требуется скомпилировать в JavaScript, прежде чем его смогут использовать браузеры и Node.js. На первый взгляд это звучит громоздко, поскольку в ваш проект добавляется дополнительный шаг сборки (если не первый). Это правда, и этим нельзя пренебрегать, но этот шаг компиляции включает в себя преимущество, которое, возможно, полностью компенсирует предыдущий недостаток:

Компилятор проверяет наш код.

Это означает, что если мы случайно написали

const dist = getDistanceDriven(4);

то уже во время компиляции мы получим жалобу на то, что нельзя вызвать этот метод с номером. В простом JavaScript нас бы уведомляли о таких ошибках не раньше, чем во время выполнения — это может быть поздно.

Позвольте мне теперь вернуться к заявителю в голове этой статьи. Так почему же этот подход Typescript делает меня быстрее?

По-видимому, на запись всех аннотаций типов уходит больше времени, чем на простой код JavaScript.

Очевидно, что эти проверки компилятора дают преимущество во времени, что сокращает общее время разработки за счет уменьшения объема отладки. Но даже если оставить это в стороне, подход Typescript делает меня быстрее:

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

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

let userName;
let user;

«userName», скорее всего, используется для ссылки на строку, а «user» — на объект, содержащий всю информацию о пользователе. В Typescript аннотации обеспечивают полную прозрачность:

let userName: string;
let user: {name: string; phone: string; address: Address};

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

npm install -g typescript

Для этого требуется установленный Node.js и добавление Typescript в ваш глобальный репозиторий.

После этого компилятор станет доступен везде в вашем терминале. Например, чтобы скомпилировать приведенный выше код, поместите его в файл с именем «example.ts», откройте терминал в его местоположении и запустите:

tsc example.ts

Рядом с ним создается js-файл, который вы можете открыть, чтобы узнать, как все компилируется, или вы можете просто запустить его в Node.js, вызвав

node example.js

Заключение

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