Эта статья переведена с книги Михаила Краснова.7 really good reasons not to use TypeScript, пожалуйста, обратитесь к оригинальному тексту, чтобы прочитать
Многие люди любят TypeScript. Он «решает» многие проблемы JS и представляет собой «расширенный набор» JS, упрощающий чтение кода. Есть много причин использовать TypeScript, но я дам вам 7 причин не использовать TypeScript.
TypeScript опасен
TypeScript добавляет определения типов и проверяет типы во время компиляции, как это может быть рискованно? Интеграция с IDE также предупреждает о несоответствии типов. Но вот проблема. TypeScript проверяет типы только во время компиляции и только для доступных типов. Никакие сетевые вызовы, системные библиотеки, API-интерфейсы для конкретных платформ и нетипизированные сторонние библиотеки не могут взаимодействовать с TypeScript. Баги и ошибки проявляются, когда вы привыкаете к проверке типов и вам не нужно полностью понимать код и платформу.
С JS вам не нужно делать никаких предположений о типе, и вы можете проверить конкретное значение переменной, чтобы убедиться, что оно соответствует вашим ожиданиям. Или, если вас не волнует его тип в этом случае, вам не нужно ничего делать. В TS вы полагаетесь на то, что компилятор сделает это за вас, но он может проверить лишь некоторые из них. Можно совмещать, но какой в этом смысл? Если вы собираетесь тратить время на написание определений, а затем время на написание кода, чтобы убедиться, что типы обнаруживаются во время выполнения, зачем писать типы заранее?
TypeScript слишком грязный
Еще один парадокс: язык, который должен привнести ясность и удобочитаемость в кодовую базу, вместо этого делает код более неясным. Чтобы проиллюстрировать, что я имею в виду, взгляните на несколько примеров, которые я нашел в некоторых популярных библиотеках с открытым исходным кодом:
// TODO: do this more elegantly
;((currentReducer as unknown) as Reducer<
NewState,
NewActions
>) = nextReducer
Это из библиотеки Redux, цель всех этих 4 строк кода — назначить nextReducer для currentReducer.
// HACK: Since TypeScript inherits static properties too, we have to
// fight against TypeScript here so Subject can have a different static create signature
/**
* Creates a new cold Observable by calling the Observable constructor
* @static true
* @owner Observable
* @method create
* @param {Function} subscribe? the subscriber function to be passed to the Observable constructor
* @return {Observable} a new cold observable
* @nocollapse
* @deprecated use new Observable() instead
*/
static create: Function = <T>(subscribe?: (subscriber: Subscriber<T>) => TeardownLogic) => {
return new Observable<T>(subscribe);
}
Этот пример из библиотеки RxJS. Я не знаю, что вы думаете, но если мне нужно использовать инструмент, я не думаю, что это хороший инструмент.
TypeScript не решает проблему
Говорят, что TypeScript решает проблемы JavaScript. но это не правда. Динамическая типизация никогда не была проблемой в JavaScript, но многие другие подводные камни, такие какNaN===NaN
Будучи ложным, точки с запятой, являющиеся необязательными или необязательными, новые строки, изменяющие определения объектов на области видимости, использование синтаксического сахара вместо ООП и т. д., действительно являются проблемами. Вместо решения этих проблем TypeScript представил еще один стандарт, который еще больше разделил сообщество JS.
Даже если предполагаемое отсутствие типов в JS является проблемой, TS не может ее исправить. Как это решить? Только Java, C, C# и другие компилируемые языки. Можно с уверенностью гарантировать, что они будут строго типизированы во время компиляции и во время выполнения. Переводные языки этого сделать не могут.
TypeScript — это не надмножество, а подмножество
TypeScript может компилироваться в JavaScript, но по определению не может быть надмножеством. Он ограничивает то, что вы можете делать с JavaScript, и маскирует его сильные стороны, обеспечивая некоторый психологический комфорт. Если вы действительно хотите стать отличным разработчиком, не соглашайтесь на поверхностную простоту, а постарайтесь понять истинную мощь JavaScript и его гибкость.
TypeScript с открытым исходным кодом, но это все
Многие причины использовать TypeScript сводятся к тому, что он является открытым исходным кодом. Да, компилятор TS распространяется под лицензией MIT. Но он по-прежнему контролируется Microsoft, монополией, и его достижения в области открытого исходного кода — не более чем маркетинговые ходы. Не путайте открытый исходный код с демократией: Microsoft по-прежнему может делать с TS все, что вы хотите, а вы просто наблюдаете за происходящим со стороны. С другой стороны, JS управляется международным комитетом, и ничего не будет изменено без одобрения сообщества.
Но крупные компании используют его...
Я не могу поверить, что кто-то думает, что это причина для использования TypeScript. Крупные компании также используют устаревшие кодовые базы, совершают налоговые махинации и дискриминируют женщин. Почему внезапное использование TypeScript стало хорошим примером?
Но у него больше возможностей...
Больше никогда. Действительно, когда TS был впервые представлен в 2012 году, в нем были такие функции, как классы, которых в то время еще не было в JS. Но JS сильно изменился с тех пор, и TS изо всех сил старается не отставать. Если чего-то не хватает в JS, это можно сделать с помощью плагина babel.