【发布时间】:2016-08-20 17:07:53
【问题描述】:
我目前正在学习 React,并且我认为我非常了解它。然而,关于开发健壮的 React 应用程序,有一件事情一直困扰着我——开发人员使用哪些工具来进行静态类型检查?
我真的很喜欢 TypeScript。我认为它大大减少了开发 JavaScript 应用程序的痛苦,这要归功于类型检查和其他简洁的功能。 Visual Studio Code 还提供了非常好的代码完成功能。而且我知道我可以通过使用 typings + DenifitelyTyped 使其与 React 一起使用。
问题是,关于使用 React + TypeScript 的教程并不多。似乎也没有很多关于使用这个组合进行开发的文章。另一方面,很多人似乎在使用Flow,这是一个由 Facebook 支持的项目(我猜他们也使用它)。
我已经设法找到了一个discussion on Reddit,它对采用 React + TypeScript / React + Flow 的方式有优缺点。然而,对我来说,它似乎已经过时了,因为它现在大约有 10 个月大了。我认为从那以后发生了很多变化。
我还发现了两篇关于使用React + Flow 和React + TypeScript 的文章。作者陈述了他在使用这两个选项时遇到的一些问题,并得出结论认为 TypeScript 是“目前最好的选择”(2015 年 11 月),特别是因为 Flow 项目存在很多问题并且从 Facebook 收到的开发人员活动很少。他还提到它与 Babel 不兼容?
所以,我想问题是:使用 React + TypeScript 组合是否安全,或者我会遇到一些困难?流量呢?我应该检查其他一些类似的工具吗?您会推荐哪种方法?
2017 年 9 月更新:
有一年多的 TypeScript 日常使用经验,又玩了一段时间 Flow,得出以下结论:
- TypeScript 直到今天仍然很难用。问题在于 JavaScript 世界发展得太快了,以至于 TypeScript 一直落后。考虑使用新的 ES7 stage 3 特性?不,你不能。希望获得某些库的最新版本的类型提示?等一两个月,也许更久……
- Flow已经走了很长一段路,改进了很多,它可以捕捉到一些TS无法捕捉到的东西。最重要的是,它终于可以在 Windows 上运行了。此外,还有很棒的 VS Code 插件(不知道为什么它只有 3/5 的评分)。它与 React Native 100% 兼容,TypeScript 还不到 50%。
- 大多数时候,您根本不需要类型。所有额外的输入很少是值得的。 JS 是一种动态类型的语言,克服它:)
TL;DR:如果您打算使用任何类型检查器,我建议使用 Flow。
2019 年 2 月更新:
我认为上述建议已过时,不再适用。三个原因:
- React Hooks 在这里。它们使您的代码的类型检查变得更加容易。 In most situations, no additional code is needed.
- TypeScript 的类型推断得到了改进。
- TypeScript 拥有比 Flow 更大的社区。 Even yarn,Facebook 的包经理,is moving away from Flow, to TypeScript。
所以,我认为 TypeScript 在 2019 年是比 Flow 更务实的选择。
至于是否值得使用任何类型检查器,我想说这取决于项目规模。小型项目可能不需要它。
【问题讨论】:
-
你也可以只使用纯 JavaScript,React 为你提供了 propTypes,这样你就可以确保 props 是正确的类型并在需要时传递。
-
是的,我知道 propTypes。但是,这只能部分解决问题 - 在视图层中(如果我没记错的话?)。商店和操作中的代码呢?我也想在那里进行静态输入。
-
blog.wolksoftware.com/working-with-react-and-typescript 似乎有一些关于使用 typescript 和 react 以及您需要使用的不同扩展的很好的文档
-
感谢文章的链接!我过去见过它,但我认为作者过得太快了(尤其是对于像我这样刚开始使用 React 的人)。不过,第二次看这篇文章时,我发现了一篇优秀文章的链接,如果你想像我一样使用 React + TypeScript 组合,我strongly recommend reading it。
-
感谢您在发布 3 年后继续更新。值得注意的是,现在使用 "$create-react-app
--typescript" 支持 ts
标签: javascript reactjs typescript babeljs flowtype