nodejs 项目有必要从 javascript 切换到 typescript 或者 flow 吗

2017-07-08 20:09:46 +08:00
 ufo22940268

一个人开发的时候用 javascript 没什么问题,但是人多了之后(比如 4 到 5 个)不知道切换到 typescript 收益大不大?

各位有这种经验吗?

11826 次点击
所在节点    Node.js
36 条回复
iwege
2017-07-09 09:37:13 +08:00
ts 能上就上,别吝啬写 type 的时间。后端尤其需要...
caiya21
2017-07-09 10:00:04 +08:00
请问你们写 koa 用 ts 啦?没有类型文件吧?
williamx
2017-07-09 10:45:56 +08:00
看规模,规模越大,js 的噩梦就越深。
anubiskong
2017-07-09 10:46:07 +08:00
强类型无法减少 bug,单元测试和集成测试可以
如果是为了 IDE 智能提示,那就上 TS 吧
或者等 vscode 加强智能提示功能,他们已经有计划加强 d.ts 的跳转和提示了
liuxin5959
2017-07-09 11:06:22 +08:00
总感觉 TS 对后端意义不大,都想要类型检查了,为啥不直接用 Java 或 Go。在后端用 JS,最主要的目的不就是为了动态语言的灵活和快速开发吗?
hantsy
2017-07-09 13:33:31 +08:00
typescript 好处:

1. OOP 概念,ES6/ES7 兼容,如果从 Java,C # 切换过来也不费力。
2. IDE 支持不是好一点点,开发效率大大提高。

坏处:
1. OOP 概念,如果传统的 ES 5 程序员(没多少 Class 概念)可能感觉不适应。
2. 学习曲线可大可少,因人而异,关键看是否愿意学习。
3. 有些程序员对任何新技术出来就是抵制情绪,深信自己写的 ES5 效率更高,嫌 TS 编译出来垃圾太多,看不起 TS,OOP 的人,我也见过。
hantsy
2017-07-09 13:36:12 +08:00
@caiya21 基本上你能想到的(除了那个实在不流行),都有相应的 Type 定义文件(直接安装, 如 @types/moment ),有的已经在包中集成了(不需要额外安装 )。
zhuangzhuang1988
2017-07-09 17:03:40 +08:00
j1wu
2017-07-09 17:17:59 +08:00
我最近的一个小项目( https://www.v2ex.com/t/374080 )就上了 flow,“投资回报比”还是挺不错的,整个过程没有耗费太多时间,之前担心没有 libdef 的第三方库怎么处理,结果 flow 现在能自动生成 libdef 的 stub。有了更好的 IDE ( vscode )提示,build 的时候也能多一层检查。同意 24 楼的说法,要健壮还是测试得跟上。
crysislinux
2017-07-09 17:20:33 +08:00
@hantsy 现成的 type 经常有问题,没问题的都是原生的 ts,然而原生不多
hantsy
2017-07-09 17:39:55 +08:00
@crysislinux 有问题的应该少吧,不过我也遇到过。

有问题找官方去看一下 issues 中有没有方案,https://github.com/DefinitelyTyped/DefinitelyTyped, 很多时侯,你遇到也许别人也遇到 了,已经找了解决方案。
hantsy
2017-07-09 17:41:36 +08:00
@crysislinux 以后估计流行的 JS 包都会自己维护 d.ts 文件了,现在有些包已经是这样的。
crysislinux
2017-07-09 17:57:24 +08:00
@hantsy 我前几天一个不大的项目转 ts 都遇到好几个这种问题。typings 和包分开维护根本不科学啊,经常导致要用最新包还要自己 patch 一下 typings。有些包里带了 d.ts ,但是有 bug 也是常有的事,最好的还是库本来就是 ts 写的,然后 d.ts 都是编译器生成的。

不过有问题的 typings 先卸载了,自己 declare 一下 module 先用着 any 等 patch 倒也可以。
rekey
2017-07-17 10:51:46 +08:00
用了 ts 就再也不想写 js 了
springwarm
2017-09-11 19:17:52 +08:00
静态类型检查显然还是能减少一些 bug 的,虽然单元测试和自动化测试也极有价值

说些 flow 的特点 (当前版本是 v0.54.1 )
- flow 的 typings (lib-def) 是根据库的版本号来匹配的(支持范围匹配)
- flow (通过 flow-typed )可以自动分析项目依赖,自动生成所有依赖包的 typings。对于没不到 typings 的依赖包,会自动生成 stub
- flow 可以只针对项目中的某些文件启用 type checking。比如只针对 data model 以及用到 data model 的文件启用 type checking

flow 的不足
- 如 @doubleflower 所说,实际应用中,遇到有些 case 没有在文档中提及的情况,要通过 issues 来找答案,这和 @hantsy 说的用 ts 遇到 typings 的问题时的处理方法一样
- 现成的 typings 比 ts 的少很多。但是可以用 flow-gen 将 ts 的 typings 转译过来

flow 和 ts 在类型检查这一面上做比较,前者更看重,可以递进和选择性的应用到项目中
springwarm
2017-09-11 19:21:49 +08:00
Vue 2.0 为什么选用 Flow 进行静态代码检查而不是直接使用 TypeScript ?
https://www.zhihu.com/question/46397274

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/373972

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX