nodejs 项目有必要从 Javascript 切换到 typescript 或者 flow 吗 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
ufo22940268
V2EX    Node.js

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

  •  
  •   ufo22940268 2017-07-08 20:09:46 +08:00 12519 次点击
    这是一个创建于 3092 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    各位有这种经验吗?

    第 1 条附言    2017-07-09 15:17:12 +08:00
    看了各位的评论之后我决定不用 ts 了
    36 条回复    2017-09-11 19:21:49 +08:00
    ghostheaven
        1
    ghostheaven  
       2017-07-08 20:12:45 +08:00 via Android
    有了 babel 之后就没有动力搞 ts 了
    ufo22940268
        2
    ufo22940268  
    OP
       2017-07-08 20:14:09 +08:00
    @ghostheaven 可能我没有描述清楚,我考虑的重点是类型检查,而不是 js 最新的语言特性
    ETiV
        3
    ETiV  
       2017-07-08 20:17:47 +08:00 via iPhone
    别的不知道
    但 webstorm 的提示是更准确了……
    ghostheaven
        4
    ghostheaven  
       2017-07-08 20:19:06 +08:00 via Android
    @ufo22940268 明白,静态类型好检查,不好写,瞎说的,我也没有经验。
    xcatliu
        5
    xcatliu  
       2017-07-08 20:29:48 +08:00 via iPhone
    @ghostheaven ts 现在基本上不需要手动写类型,也可以自动推论出来类型了
    murmur
        6
    murmur  
       2017-07-08 20:33:03 +08:00
    js 那些最新的特性 你甚至在 npm 里找到更好的 比如支持嵌套覆盖的 object.assign
    janxin
        7
    janxin  
       2017-07-08 22:45:21 +08:00 via iPhone   1
    后端项目有必要啊。动态一时爽,重构火葬场
    learnshare
        8
    learnshare  
       2017-07-08 22:46:04 +08:00
    能上 TS 上 TS
    Ruiming
        9
    Ruiming  
       2017-07-08 22:47:04 +08:00
    用了 ts 就再也不想写 js 了
    doubleflower
        10
    doubleflower  
       2017-07-08 23:30:08 +08:00 via Android
    我用的 flow,强烈推荐上。和 babel 和 atom 配合完美。
    doubleflower
        11
    doubleflower  
       2017-07-08 23:33:28 +08:00 via Android
    不过 flow 的文档很坑,很多用法我都是从 issue 列表和其他开源项目学来的,所以选 ts 也没错。
    hronro
        12
    hronro  
       2017-07-08 23:55:53 +08:00
    讲道理,用了 TypeScript 之后,你就回不去了
    lkytal
        13
    lkytal  
       2017-07-08 23:58:23 +08:00
    TypeScript 可以考虑, flow 就算了
    zhpech
        14
    zhpech  
       2017-07-09 00:29:30 +08:00 via iPhone
    ts 很棒,写后端更带感
    crysislinux
        15
    crysislinux  
       2017-07-09 01:28:04 +08:00 via Android
    不知道你们遇到那种 typings 不兼容的情况咋办,现在很少有用 ts 写的后端用的库。经常库更新了 typings 有 bug,蛋疼的很啊
    markocen
        16
    markocen  
       2017-07-09 01:32:28 +08:00 via Android
    ts 最蛋疼的的是每个第三方库都要额外装一个 @typings ...
    d4rkb1ue
        17
    d4rkb1ue  
       2017-07-09 04:39:28 +08:00
    `declare var require: any`
    Septembers
        18
    Septembers  
       2017-07-09 05:48:11 +08:00 via iPad
    @ufo22940268 用 jsdoc 或者 d.ts 给 IDE 足够的 hint 也能达到效果
    Cbdy
        19
    Cbdy  
       2017-07-09 09:18:30 +08:00 via Android
    前后端都上 ts,开发体验大大提升
    t123yh
        20
    t123yh  
       2017-07-09 09:31:58 +08:00 via Android
    @ghostheaven 写起来肯定也更好写,我遇到过很多次,看着一个变量不知道里面有啥属性,如果有 Type 的话就不存在这个问题
    iwege
        21
    iwege  
       2017-07-09 09:37:13 +08:00
    ts 能上就上,别吝啬写 type 的时间。后端尤其需要...
    caiya21
        22
    caiya21  
       2017-07-09 10:00:04 +08:00
    请问你们写 koa 用 ts 啦?没有类型文件吧?
    williamx
        23
    williamx  
       2017-07-09 10:45:56 +08:00
    看规模,规模越大,js 的噩梦就越深。
    anubiskong
        24
    anubiskong  
       2017-07-09 10:46:07 +08:00
    强类型无法减少 bug,单元测试和集成测试可以
    如果是为了 IDE 智能提示,那就上 TS 吧
    或者等 vscode 加强智能提示功能,他们已经有计划加强 d.ts 的跳转和提示了
    liuxin5959
        25
    liuxin5959  
       2017-07-09 11:06:22 +08:00
    总感觉 TS 对后端意义不大,都想要类型检查了,为啥不直接用 Java 或 Go。在后端用 JS,最主要的目的不就是为了动态语言的灵活和快速开发吗?
    hantsy
        26
    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
        27
    hantsy  
       2017-07-09 13:36:12 +08:00
    @caiya21 基本上你能想到的(除了那个实在不流行),都有相应的 Type 定义文件(直接安装, 如 @types/moment ),有的已经在包中集成了(不需要额外安装 )。
    zhuangzhuang1988
        28
    zhuangzhuang1988  
       2017-07-09 17:03:40 +08:00
    j1wu
        29
    j1wu  
       2017-07-09 17:17:59 +08:00
    我最近的一个小项目( t/374080 )就上了 flow,“投资回报比”还是挺不错的,整个过程没有耗费太多时间,之前担心没有 libdef 的第三方库怎么处理,结果 flow 现在能自动生成 libdef 的 stub。有了更好的 IDE ( vscode )提示,build 的时候也能多一层检查。同意 24 楼的说法,要健壮还是测试得跟上。
    crysislinux
        30
    crysislinux  
       2017-07-09 17:20:33 +08:00 via Android
    @hantsy 现成的 type 经常有问题,没问题的都是原生的 ts,然而原生不多
    hantsy
        31
    hantsy  
       2017-07-09 17:39:55 +08:00
    @crysislinux 有问题的应该少吧,不过我也遇到过。

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

    不过有问题的 typings 先卸载了,自己 declare 一下 module 先用着 any 等 patch 倒也可以。
    rekey
        34
    rekey  
       2017-07-17 10:51:46 +08:00
    用了 ts 就再也不想写 js 了
    springwarm
        35
    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
        36
    springwarm  
       2017-09-11 19:21:49 +08:00
    Vue 2.0 为什么选用 Flow 进行静态代码检查而不是直接使用 TypeScript ?
    https://www.zhihu.com/question/46397274
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2882 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 26ms UTC 11:07 PVG 19:07 LAX 03:07 JFK 06:07
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86