7 веских причин отказаться от TypeScript

внешний интерфейс
7 веских причин отказаться от TypeScript

Эта статья переведена с книги Михаила Краснова.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.