ufo22940268
V2EX  ›  Node.js

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

  •  
  •   ufo22940268 · Jul 8, 2017 · 12893 views
    This topic created in 3256 days ago, the information mentioned may be changed or developed.

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

    各位有这种经验吗?

    Supplement 1  ·  Jul 9, 2017
    看了各位的评论之后我决定不用 ts 了
    36 replies    2017-09-11 19:21:49 +08:00
    ghostheaven
        1
    ghostheaven  
       Jul 8, 2017 via Android
    有了 babel 之后就没有动力搞 ts 了
    ufo22940268
        2
    ufo22940268  
    OP
       Jul 8, 2017
    @ghostheaven 可能我没有描述清楚,我考虑的重点是类型检查,而不是 js 最新的语言特性
    ETiV
        3
    ETiV  
       Jul 8, 2017 via iPhone
    别的不知道
    但 webstorm 的提示是更准确了……
    ghostheaven
        4
    ghostheaven  
       Jul 8, 2017 via Android
    @ufo22940268 明白,静态类型好检查,不好写,瞎说的,我也没有经验。
    xcatliu
        5
    xcatliu  
       Jul 8, 2017 via iPhone
    @ghostheaven ts 现在基本上不需要手动写类型,也可以自动推论出来类型了
    murmur
        6
    murmur  
       Jul 8, 2017
    js 那些最新的特性 你甚至在 npm 里找到更好的 比如支持嵌套覆盖的 object.assign
    janxin
        7
    janxin  
       Jul 8, 2017 via iPhone   ❤️ 1
    后端项目有必要啊。动态一时爽,重构火葬场
    learnshare
        8
    learnshare  
       Jul 8, 2017
    能上 TS 上 TS
    Ruiming
        9
    Ruiming  
       Jul 8, 2017
    用了 ts 就再也不想写 js 了
    doubleflower
        10
    doubleflower  
       Jul 8, 2017 via Android
    我用的 flow,强烈推荐上。和 babel 和 atom 配合完美。
    doubleflower
        11
    doubleflower  
       Jul 8, 2017 via Android
    不过 flow 的文档很坑,很多用法我都是从 issue 列表和其他开源项目学来的,所以选 ts 也没错。
    hronro
        12
    hronro  
       Jul 8, 2017
    讲道理,用了 TypeScript 之后,你就回不去了
    lkytal
        13
    lkytal  
       Jul 8, 2017
    TypeScript 可以考虑, flow 就算了
    zhpech
        14
    zhpech  
       Jul 9, 2017 via iPhone
    ts 很棒,写后端更带感
    crysislinux
        15
    crysislinux  
       Jul 9, 2017 via Android
    不知道你们遇到那种 typings 不兼容的情况咋办,现在很少有用 ts 写的后端用的库。经常库更新了 typings 有 bug,蛋疼的很啊
    markocen
        16
    markocen  
       Jul 9, 2017 via Android
    ts 最蛋疼的的是每个第三方库都要额外装一个 @typings ...
    d4rkb1ue
        17
    d4rkb1ue  
       Jul 9, 2017
    `declare var require: any`
    Septembers
        18
    Septembers  
       Jul 9, 2017 via iPad
    @ufo22940268 用 jsdoc 或者 d.ts 给 IDE 足够的 hint 也能达到效果
    Cbdy
        19
    Cbdy  
       Jul 9, 2017 via Android
    前后端都上 ts,开发体验大大提升
    t123yh
        20
    t123yh  
       Jul 9, 2017 via Android
    @ghostheaven 写起来肯定也更好写,我遇到过很多次,看着一个变量不知道里面有啥属性,如果有 Type 的话就不存在这个问题
    iwege
        21
    iwege  
       Jul 9, 2017
    ts 能上就上,别吝啬写 type 的时间。后端尤其需要...
    caiya21
        22
    caiya21  
       Jul 9, 2017
    请问你们写 koa 用 ts 啦?没有类型文件吧?
    williamx
        23
    williamx  
       Jul 9, 2017
    看规模,规模越大,js 的噩梦就越深。
    anubiskong
        24
    anubiskong  
       Jul 9, 2017
    强类型无法减少 bug,单元测试和集成测试可以
    如果是为了 IDE 智能提示,那就上 TS 吧
    或者等 vscode 加强智能提示功能,他们已经有计划加强 d.ts 的跳转和提示了
    liuxin5959
        25
    liuxin5959  
       Jul 9, 2017
    总感觉 TS 对后端意义不大,都想要类型检查了,为啥不直接用 Java 或 Go。在后端用 JS,最主要的目的不就是为了动态语言的灵活和快速开发吗?
    hantsy
        26
    hantsy  
       Jul 9, 2017
    typescript 好处:

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

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

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

    不过有问题的 typings 先卸载了,自己 declare 一下 module 先用着 any 等 patch 倒也可以。
    rekey
        34
    rekey  
       Jul 17, 2017
    用了 ts 就再也不想写 js 了
    springwarm
        35
    springwarm  
       Sep 11, 2017
    静态类型检查显然还是能减少一些 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  
       Sep 11, 2017
    Vue 2.0 为什么选用 Flow 进行静态代码检查而不是直接使用 TypeScript ?
    https://www.zhihu.com/question/46397274
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   2940 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 87ms · UTC 12:46 · PVG 20:46 · LAX 05:46 · JFK 08:46
    ♥ Do have faith in what you're doing.