Javascript 反应-使用类型脚本vs流vs?

Javascript 反应-使用类型脚本vs流vs?,javascript,reactjs,typescript,babeljs,flowtype,Javascript,Reactjs,Typescript,Babeljs,Flowtype,我现在正在学习React,我想我很了解它。然而,有一件事一直困扰着我,那就是开发健壮的React应用程序——开发人员使用什么工具进行静态类型检查 我真的很喜欢打字稿。我认为,由于类型检查和其他整洁的特性,它大大减少了开发JavaScript应用程序的痛苦。VisualStudio代码还提供了非常好的代码完成。我知道我可以使用React+使其工作 问题是,关于使用React+TypeScript的教程并不多。关于使用此组合进行开发的文章似乎也不多。另一方面,许多人似乎正在使用,这是一个由Faceb

我现在正在学习React,我想我很了解它。然而,有一件事一直困扰着我,那就是开发健壮的React应用程序——开发人员使用什么工具进行静态类型检查

我真的很喜欢打字稿。我认为,由于类型检查和其他整洁的特性,它大大减少了开发JavaScript应用程序的痛苦。VisualStudio代码还提供了非常好的代码完成。我知道我可以使用React+使其工作

问题是,关于使用React+TypeScript的教程并不多。关于使用此组合进行开发的文章似乎也不多。另一方面,许多人似乎正在使用,这是一个由Facebook支持的项目(我猜他们也在使用它)

我已经找到了一个关于React+TypeScript/React+Flow方式的利弊分析。然而,对我来说,它似乎已经过时了,因为它现在大约有10个月了。我认为从那时起,情况发生了很大变化

我还发现了两篇关于使用和的文章。作者陈述了他在使用这两个选项时遇到的一些问题,并得出结论,TypeScript是“目前最好的选择”(2015年11月),特别是因为Flow项目存在许多问题,并且从Facebook获得的开发者活动较少。他还提到巴贝尔的表现不好

所以,我想问题是:使用React+TypeScript组合是安全的,还是会遇到一些困难?流动呢?还有其他类似的工具吗?你会推荐哪种方法

2017年9月更新:

经过一年多的日常打字经验,以及一段时间的Flow游戏,我得出了以下结论:

  • 直到今天,打字脚本仍然很难使用。问题是JavaScript世界的发展如此之快,以至于TypeScript一直落后。考虑使用ES7第3阶段的新功能吗?不,你不能。希望获得某些库的最新版本的类型提示吗?等一个月,或者两个月,也许更多
  • 流量已经走了很长的路,它已经改进了很多,它可以捕捉到一些TS不能捕捉到的东西。最重要的是,它最终在Windows上工作。此外,还有一个很棒的VS代码插件(不知道为什么它只有3/5的评级)。它100%适用于React Native,TypeScript甚至还不到50%
  • 大多数时候,你根本不需要类型。所有额外的打字很少值得。JS是一种动态类型化的语言,克服它:)
TL;DR:如果您打算使用任何类型检查器,我建议使用Flow

2019年2月更新:

我认为上述建议已经过时,不再适用。原因有三:

  • 你在这儿。它们使代码的类型检查更加容易
  • TypeScript的类型推断得到了改进
  • TypeScript的社区比Flow大得多。即使是Facebook的软件包管理器yarn
因此,我认为TypeScript比2019年的Flow更为务实


至于是否值得使用任何类型检查器,我认为这取决于项目的大小。小项目可能不需要它。

我要开始回答这个问题,说我从来没有使用过Flow,所以我不能说太多。但是,我们在工作中使用React和TypeScript,效果非常好

我们有我想你已经知道的所有好处,比如重构、类型安全、自动完成等等

当然,就我所见,流语法比TypeScript更简洁,但是您可以使用TypeScript增量添加类型。我想,这更多的是品味问题。有些人喜欢显式地键入代码,另一些人喜欢少键入,并有更强的类型推断

关于技术,我认为TypeScript是一个安全的赌注,微软正在推动语言(),Angular也在使用它,还有很多Angular开发者。即使在这里,tag TypeScript也有超过4K的追随者,而且很少有人会有未回答的问题


TypeScript的一个大问题是,至少对我们来说,我们有时会决定使用没有类型定义的组件或库,所以我们必须自己创建它们。但我想,这是一种回馈社区的方式。

我只是问了自己同样的问题(虽然不是React),并发现以下文章在评估这两个方面很有用:

  • (2016-07-15)
  • (2015-11-20)
  • (2015-11-13)
流设计人员采用的方法感觉功能更强,类型推断更好,空值方法更好。但是,TypeScript有更好的社区支持,特别是在为第三方库引入类型方面,通过它,类型在所有代码中流动以实现最大的类型安全性非常重要。TypeScript是由Microsoft创建的,它在编写编译器和朝着有利的方向发展技术方面有着丰富的历史-值得注意的是C#和他们已经添加非空类型的事实(2016-07-11):

打字脚本似乎是今天更安全的赌注

对于那些在现有代码库中尝试TypeScript的人,我发现我的tsconfig.json文件中的以下设置非常有助于使TypeScript与JavaScript很好地共存(允许一次转换一个文件):


在我的React开发中,我建立了一个相当复杂的///工具链,并且从未遇到过任何流问题。设置一切都需要一些努力(起初,Webpack可能会让人望而生畏),但之后,它就可以正常工作了。Flow无疑是一条必由之路,因为它是一种更狭隘、更专注的技术,因此更可能与其他工具配合使用。相比之下,TypeScript不仅仅是一个类型推断/静态类型检查工具,因此它带来了
{
    "compilerOptions": {
        "allowJs": true,
        "isolatedModules": true,
        ...
    }
}