ufo22940268
V2EX  ›  Node.js

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

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

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

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

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

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