Подтвердить что ты не робот

React - используя TypeScript против Flow vs?

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

Мне очень нравится TypeScript. Я думаю, что это значительно уменьшает боль при разработке приложений JavaScript, благодаря проверке типов и другим опрятным функциям. Visual Studio Code также предлагает действительно хорошее завершение кода. И я знаю, что я могу заставить его работать с React, используя typings + DenifitelyTyped.

Дело в том, что не много учебников об использовании React + TypeScript. Там также не так много статей о разработке с использованием этого комбо. С другой стороны, многие люди, кажется, используют Flow, который является проектом, поддерживаемым Facebook (и я предполагаю, что они также используют его).

Мне удалось найти обсуждение Reddit с плюсами и минусами относительно перехода на React + TypeScript/React + Flow, Однако мне кажется, что он довольно устарел, так как сейчас около 10 месяцев. Я думаю, что многое изменилось с тех пор.

Я также нашел две статьи об использовании React + Flow и Изменить + TypeScript. Автор заявляет о некоторых проблемах, с которыми он сталкивается при использовании обоих опций, и приходит к выводу, что TypeScript является лучшим вариантом прямо сейчас (ноябрь 2015 г.), особенно потому, что проект Flow имеет много проблем и получает низкую активность разработчика от Facebook. Он также упоминает, что он не хорошо играет с Вавилоном?

Итак, я думаю, вопрос будет: безопасно ли использовать комманду React + TypeScript, или я столкнусь с некоторыми трудностями? Как насчет Потока? Есть ли другие подобные инструменты, которые я должен проверить? Какой подход вы бы порекомендовали?

Обновление сентябрь 2017 года:

Имея более чем год опыта ежедневного использования TypeScript и играя с Flow на некоторое время, я пришел к следующим выводам:

  • TypeScript по-прежнему остается болезненным для использования по сей день. Проблема в том, что мир JavaScript движется так быстро, что TypeScript продолжает отставать. Размышление об использовании этой новой модели ES7 Stage 3? Нет, вы не можете. Желаете получить подсказки типа для последней версии некоторой библиотеки? Подождите месяц или два, может быть, больше...
  • Поток прошел долгий путь, он значительно улучшился, он может поймать некоторые вещи, которые TS не может. Лучше всего, он, наконец, работает в Windows. Кроме того, есть отличный плагин для VS Code (не знаю, почему он имеет только 3/5 рейтинга). И он работает на 100% с React Native, TypeScript еще не на 50%.
  • В большинстве случаев вам не нужны типы вообще. Вся дополнительная типизация редко стоит того. JS - динамически типизированный язык, преодолевать его:)

TL; DR: Если вы планируете использовать любой тип проверки, я рекомендую использовать Flow.

4b9b3361

Ответ 1

Я собираюсь начать этот ответ, сказав, что я никогда не использовал Flow, поэтому я не могу много говорить об этом. Но мы используем React и TypeScript на работе, и он отлично работает.

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

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

О, технологии, которые я бы сказал, TypeScript - это безопасная ставка, Microsoft нажимает язык (скоро будет версия 2), Angular также использует его, и существует множество разработчиков Angular. Даже здесь, на SO, тег TypeScript имеет более 4K последователей и редко встречается без ответа.

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

Ответ 2

Я просто задал себе тот же вопрос (хотя и не с React) и нашел следующие статьи полезными при оценке двух:

Подход, созданный проектировщиками потоков, более функциональен с лучшим типом вывода и лучшим подходом для нулей. Тем не менее, TypeScript имеет лучшую поддержку сообщества, особенно в отношении вытягивания типов для сторонних библиотек через http://definitelytyped.org/, что важно для потоков типов через весь ваш код для обеспечения максимальной безопасности. TypeScript создан корпорацией Майкрософт, которая имеет богатую историю написания компиляторов и развивает технологию в благоприятных направлениях - заметна здесь С# и тот факт, что они уже добавляют ненулевые типы (2016-07-11): https://blogs.msdn.microsoft.com/typescript/2016/07/11/announcing-typescript-2-0-beta/

TypeScript кажется сегодня более безопасным.

И для тех, кто пытается использовать TypeScript в существующей кодовой базе, я нашел следующие параметры в моем файле tsconfig.json, очень полезный, позволяя TypeScript хорошо сочетаться с JavaScript (разрешая переход одного файла за раз):

{
    "compilerOptions": {
        "allowJs": true,
        "isolatedModules": true,
        ...
    }
}

Ответ 3

В моей разработке React у меня довольно сложный Babel/Webpack/Flow/Mocha, и никогда не возникало проблем с Flow. Делает некоторые усилия, чтобы настроить все (сначала Webpack может быть сложным), но потом он просто работает. Поток - это, безусловно, путь, поскольку он представляет собой более узкую и более целенаправленную технологию, и, как таковая, более вероятно, что она будет хорошо работать с другими инструментами. Напротив, TypeScript пытается быть намного больше, чем просто средство ввода типа/статического типа, и таким образом он приносит дополнительный багаж и предположения. Так что React - это специализированный инструмент, который хорошо работает, а TypeScript - это язык, на котором поверх JavaScript. Чтобы убедиться, что Microsoft загружает свою точку дома, TypeScript файлы обычно имеют другое расширение (.ts вместо .js), потому что вы используете другой язык, получили его?

TypeScript использует генерацию кода для вышивания JavaScript, тогда как в потоке аннотации просто удаляются, генерация кода как таковая отсутствует. Раньше люди Microsoft, продвигающие TypeScript, использовали утверждение о том, что генерация кода "file-local" (я не помню точной терминологии). Это должно было обеспечить успокаивающее заверение, что компилятор TypeScript не делает ничего слишком магического. Во всяком случае, я не могу найти, что этот отчет заметно отображается. С Flow вам не нужны такие заверения, как вы пишете в простом JavaScript (или любой другой версии ECMA, для которой вы настроили Babel), и аннотации, как я уже сказал, просто лишены.

Не говоря уже о том, что TypeScript исходит от компании, которая специализируется на неэтичных и сомнительных технических практиках (я не исключаю, что TypeScript может в конечном итоге оказаться матерью всех Embrace-Extend-Extinguish уловок).

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

Наконец, тот факт, что Angular использует TypeScript, означает абсолютно ничего, поскольку Angular не имеет особого отношения к новым проектам. Реакция одержала победу, время для перехода.