V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
ufo22940268
V2EX  ›  Node.js

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

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

    一个人开发的时候用 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
    我最近的一个小项目( https://www.v2ex.com/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   ·   我们的愿景   ·   实用小工具   ·   4028 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 31ms · UTC 05:21 · PVG 13:21 · LAX 22:21 · JFK 01:21
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.