2016-04-26 3 views
25

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

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

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

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

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

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

Обновление сентября 2017:

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

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

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

+0

Вы также можете просто использовать простой javascript, а React предлагает вам propTypes, чтобы вы могли убедиться, что реквизит является правильным типом и передается, если требуется. – erichardson30

+0

Да, я знаю о propTypes. Однако это решает проблему лишь частично - в слое представления (если я не ошибаюсь?). Как насчет кода в магазинах и действиях? Я также хотел бы иметь статическую печать. –

+1

http://blog.wolksoftware.com/working-with-react-and-typescript похоже, что у него есть хорошая документация об использовании машинописных текстов с реакциями и разных расширений, которые вам нужно использовать – erichardson30

ответ

14

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

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

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

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

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

4

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

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

Сегодня TypeScript выглядит как более безопасная ставка.

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

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

В моем развитии React, у меня есть довольно сложный Babel/Webpack/Flow/Mocha набор инструментов не установлен и не было никаких проблем с потоком. Делает некоторые усилия, чтобы настроить все (сначала 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).

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

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

+2

«компания, специализирующаяся на неэтичных и сомнительных технических практиках», а Facebook - нет? :П – swalladge