В зависимости от того, кого вы спросите, Typescript - либо спаситель, либо крах Javascript. Независимо от того, как вы себя чувствуете, нельзя отрицать его популярность и привлекательность для многих разработчиков. Мне удавалось избегать написания Typescript до недавнего времени, когда моя команда решила применить его для нового проекта. Есть надежда, что использование TS поможет нам избежать тех видов ошибок, которые поддаются использованию JS: ошибок типов, доступа к свойствам объектов, которые могут не существовать, и других ловушек, которые возникают за счет динамически типизированного языка. Вы когда-нибудь видели это: undefined is not a function?

Чтобы подготовиться к погружению в кодовую базу Typescript, я включил ее в побочный проект, над которым работал, чтобы получить некоторый практический опыт. В этом проекте используются React, Antd и axios для создания формы для выполнения некоторых основных операций CRUD. Достаточно просто, правда?

Ух ты, кода много

Первое, что я заметил при включении TS в свой проект, - это раздувание кода. Очевидно, что добавление объявлений типов для функций, переменных и типов должно было быть добавлено к строкам кода, но мне показалось немного утомительным объявлять такое количество типов, особенно для объектов, которые могут иметь вложенные свойства и ссылки на другие типы.

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

type SupportingDocument = {
name: string;
};
type Document = {
name: string;
completed: boolean;
signatureId: string;
};
type CounterOffers = {
name: string;
completed: boolean;
signatureId: string;
counterOfferId: string;
};
type Buyer = {
_id: string;
name: string;
counterOffers: CounterOffers[];
supportingDocuments: SupportingDocument[];
};

Типы на помощь

Вскоре я понял, насколько полезны были эти объявления типов. Небольшие ошибки, подобные приведенной выше (сколько раз вы ошибочно принимали id за _id?), Были быстро обнаружены моей IDE, VS Code.

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

Конечно, типы работают только тогда, когда вы их используете ...

Подойдет любой тип

Я знаю, что вы, более опытные разработчики TS, сейчас качаете головой. Я прошу прощения. На момент написания этой статьи я не беспокоился о том, чтобы определить тип ответа axios, и решил, что any type будет достаточно, пока я не исправлю его (добавьте TODO проверку!).

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

Я понимаю, почему разработчики с разных языков любят этот ...

Typecript впервые приобрел популярность с Angular, JS-фреймворком, который часто используется в тандеме с проектами .Net / C #. Разработчики, пришедшие из основанных на классах языков со статической типизацией, таких как C #, могут чувствовать себя более комфортно с Typescript и иметь более плавный переход в экосистему Javascript, не отталкивая полностью тех, кто написал только Javascript.

Неудивительно, что, возможно, C # и Typescript были написаны одним и тем же человеком: Андерс Хейлсберг

Мой компьютер работает медленнее?

Я быстро заметил, что горячая перезагрузка моего проекта React, похоже, не такая горячая, как другие проекты, которые я запускал одновременно. Что дает?

Кажется, что вся эта проверка типов требует значительных ресурсов. Это отставание в VS Code не означает отставание в браузере, поскольку TS компилируется в Javascript, но это стоит отметить.

Так я должен продолжать его использовать? 🤔

Как и большинство разработчиков JS, меня укусили ошибки, такие как доступ к свойству undefined объекта, попытки отправить строковое значение вместо числа в конечную точку, которая принимает только целые числа, и, как правило, тратить драгоценные моменты на отладку ошибок, которые могли быть предотвращено с помощью проверки типа и обеспечения соблюдения.

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