V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐关注
Meteor
JSLint - a JavaScript code quality tool
jsFiddle
D3.js
WebStorm
推荐书目
JavaScript 权威指南第 5 版
Closure: The Definitive Guide
BoringTu
V2EX  ›  JavaScript

为什么你们要选择 TypeScript?

  •  
  •   BoringTu · 2021-05-06 14:45:03 +08:00 · 24608 次点击
    这是一个创建于 1326 天前的主题,其中的信息可能已经有所发展或是发生改变。
    我只是不明白为啥这么多人会选择 ts ?理由是啥啊? ts 出来的那年我就关注了,但所有的理由在我看来都是莫名其妙的观点,但这些年怎么还用的人越来越多了?
    咱就说脑回路很神奇的把本身弱类型为优势的 JavaScript,套了一层强类型的壳的这步操作我就看不懂了,这是图啥呢?这样代码写着不难受么?那你直接用 Java 写然后编译成 JavaScript 不好么?
    网上有很多人说,用 ts 可以减少因类型导致的错误。大哥,你是个程序员,你连自己写的代码是怎么跑的都不知道的话,转行好吗?我十一年的程序员了,js 写了 11 年,js 的其他高级语言我也都研究过,包括 ts,但现在只用 es6 和 coffee2,我怎么就一次都没碰到过我连变量背后的值类型导致的 bug 呢?
    303 条回复    2022-11-03 12:30:06 +08:00
    1  2  3  4  
    youxiachai
        1
    youxiachai  
       2021-05-06 14:48:18 +08:00   ❤️ 4
    项目规模大了...人员变动多了..ts 相比原来的代码...其实好维护很多...
    Rwing
        2
    Rwing  
       2021-05-06 14:51:38 +08:00
    如楼上所说,强类型语言更适合大型多人协作的项目,小项目单人项目用啥都行。
    BoringTu
        3
    BoringTu  
    OP
       2021-05-06 14:53:04 +08:00   ❤️ 1
    @youxiachai 说到这个,我就还有一个疑问,为啥感觉 coffee 用的人越来越少。。
    coffee 从 1 到 2 我一直都在用,个人认为 js 的高级语言里,就没有比 coffee 更好用的了(注:本人 java 出身。。
    LokiSharp
        4
    LokiSharp  
       2021-05-06 14:53:25 +08:00
    TS 能减少心智负担,小项目人脑就能 hold 住,规模大了真就是自己写的代码过了几天就看不懂了
    Leviathann
        5
    Leviathann  
       2021-05-06 14:54:05 +08:00
    这套类型系统不是学的 java
    java 的类型系统在 ts 面前就是小儿科
    xarthur
        6
    xarthur  
       2021-05-06 14:54:17 +08:00 via iPhone   ❤️ 5
    不爱用就不要用呗(
    BoringTu
        7
    BoringTu  
    OP
       2021-05-06 14:55:07 +08:00
    @Rwing 我司现在正在做的一个后台系统,也是我从业十来年里看到的最复杂的后台系统,我们用 coffee 写的,没有任何问题啊,所以 ts 的优势到底在哪呢。。
    BoringTu
        8
    BoringTu  
    OP
       2021-05-06 14:56:41 +08:00
    @xarthur 我只是不明白为啥这么火~
    youxiachai
        9
    youxiachai  
       2021-05-06 14:57:52 +08:00
    @BoringTu ts 微软出品....认同高...
    不是你认为好用就行..这个是市场方面的事情,微软这方面教育得还好...
    kop1989
        10
    kop1989  
       2021-05-06 14:58:40 +08:00
    康威定律:设计系统的架构受制于产生这些设计的组织的沟通结构。
    再结合当前互联网逐渐寡头化,人员流动加快,功能解耦来看。

    是不是就明晰很多了。
    yaphets666
        11
    yaphets666  
       2021-05-06 14:58:51 +08:00
    我对 ts 了解不深,但是编程中深有感触,一个变量如果能确定是什么类型,心里要踏实的多,写出来的程序更有信心。
    如果 ts 写起来像 js 一样快且简洁的话,我愿意用,但实际上是时间很紧,团队等原因,用不太上。
    我是在小团队里十几人,大公司大团队用 ts 应该更多。
    ytll21
        12
    ytll21  
       2021-05-06 15:01:23 +08:00
    用的人多,招人好招。想想 Java 就知道了,如果你负责面试的话,你就知道招一个 Java 程序员和一个非 Java 程序员,之间的区别有多大了。
    Rwing
        13
    Rwing  
       2021-05-06 15:01:56 +08:00
    @BoringTu 就是因为强类型啊。。。。。coffee 其实只是加了点语法糖,typescript 的重点就是 type
    BoringTu
        14
    BoringTu  
    OP
       2021-05-06 15:02:02 +08:00
    @youxiachai emmmm,我们的话题在往另一个争论更大的话题上偏。。不过我还是忍不住要问一句
    你肯定是用 windows 的吧,你不觉得 windows 用起来浑身难受么。。
    因为孩子的关系,我已经实现了以前我跟别人说的那句,如果不是为了玩游戏,我可以一辈子不碰 windows 。。
    我已经有半年没碰过 windows 了,因为实在是没时间玩游戏。。
    Vegetable
        15
    Vegetable  
       2021-05-06 15:03:10 +08:00
    通过恶心同事来让自己舒服。
    Rwing
        16
    Rwing  
       2021-05-06 15:03:55 +08:00   ❤️ 2
    @youxiachai 这个真不是,恰恰有很多 ts 初级用户都不知道这是微软的,而且相反的是,在国内,其实只要是微软的东西,都会被黑一下的,无论好与坏,先喷了再说。
    BoringTu
        17
    BoringTu  
    OP
       2021-05-06 15:05:36 +08:00
    @kop1989 你的想法绝大部分我是理解的,这个绝大部分是过程部分,比如因为 ts 火了,用的公司多,所以行业内 ts 空前发达,从员工角度来说,如果不掌握 ts,自己就没有市场
    关键是我不理解的是起源部分,就是为啥 ts 会火,而不是 coffee 或者其他 js 高级语言火。。这个我没想明白~
    Jirajine
        18
    Jirajine  
       2021-05-06 15:07:31 +08:00   ❤️ 2
    因为多数程序员都是离了类型系统就不会写代码的菜鸡,没有楼主这么聪明。
    intmax2147483647
        19
    intmax2147483647  
       2021-05-06 15:08:32 +08:00
    代码不是只是写给自己的,用 TS 有更明确的类型定义,阅读起来更好懂一些,对于一些没有怎么写过 JS 的人来说(比如我写 JAVA )。当然也可能是作为一个 JAVA 程序员对 JS 的偏见,觉得没有类型可能会导致很多潜在的 BUG
    janxin
        20
    janxin  
       2021-05-06 15:09:06 +08:00
    LZ 接手过屎山吗...
    kop1989
        21
    kop1989  
       2021-05-06 15:09:18 +08:00   ❤️ 1
    @BoringTu #16 这个“火”,我个人理解很大程度上是偶然的。换句话说,掌握技术选型的这帮互联网头部人士,他们内部固步自封、内循环的结果。(我认为这种“结果”还有很多,比如 leetCode 刷题,比如青睐 github 开源等等)

    这就像是为何 VUE 国内这么火,而在国外 React 更胜一筹一样😂。
    BoringTu
        22
    BoringTu  
    OP
       2021-05-06 15:09:51 +08:00
    @Rwing coffee 是语法糖,但也因为这语法糖解决了很多痛点,也所以 es6 大部分新特性是借鉴 coffee 的。

    而 js 的弱类型,是 js 的特性,而且在我们看来是 js 的优势,基于弱类型你的代码就会很灵活。然后 ts 就把这个特性覆盖成强类型了??
    learningman
        23
    learningman  
       2021-05-06 15:10:32 +08:00 via Android   ❤️ 1
    因为好用啊,我鼠标晃一下就知道这个变量,这个参数是什么类型的。
    hronro
        24
    hronro  
       2021-05-06 15:11:34 +08:00   ❤️ 20
    首先,建议用静态类型来称呼 TypeScript 而不是用强类型来称呼,强 /弱类型并没有一个所有人都认同的定义,有人认为 C/C++ 是弱类型有人认为不是,有人认为 Python 是强类型有人认为不是,所以为了避免争议,用动态言语 / 静态语言来称呼更合适。

    我认为静态类型最大的好处就是能为语言带来各种各样的工具,比如自动补全,静态检查,可靠的重命名变量名等等。

    「你连自己写的代码是怎么跑的都不知道的话,转行好吗?」这句话我不敢苟同。即使你可以记住你代码的每一个细节,但一个项目通常不只是你一个人在写,你能清楚的记住每一个别人写的函数的签名吗?如果没有文档和也没有类型标注,你可能需要把整个函数的源码读一遍(或者几遍)才能弄清楚这个函数该怎么用。但如果有类型标注的话,大部分时候看类型就能猜个大概了。这些都是能大幅提高工作效率的地方。

    早期的静态语言由于类型系统不够灵活,相关的工具不够成熟,通常在开发效率上不如动态语言。然而现代的静态语言在更强大的类型系统和更强大的工具的加持下,开发效率上基本已经不输动态语言了,并且还享有额外的安全保障。所以从某种程度上讲,我认为所有的动态语言都可以算的上是历史遗留产物,君不见近些年新出的语言如 Go 、Rust 、Swift 等等都是静态语言,Python 现在也有了 Type Hint,据说 Ruby 3 也会改成静态言语了。
    yohole
        25
    yohole  
       2021-05-06 15:11:48 +08:00   ❤️ 2
    TypeScript 本身是没有问题的,恶心的是 Node.js 这个工具链的问题,加上依赖包的网络问题,新手直接劝退
    BoringTu
        26
    BoringTu  
    OP
       2021-05-06 15:14:16 +08:00
    @janxin 接过,甚至曾经还接手过压缩混淆后的代码~
    不过这个不能说明什么问题啊,这是招人门槛的问题,哦。。卧槽,我知道你说的啥意思了,我也知道我为啥不能接受 ts 的原因了。。
    你的意思是说,公司很可能会招各种刚入行的新人来写代码,然后 ts 可以过一道是吧。。
    我之前没有想到的原因是,招人是我面的,新手我是不会给过的。。好吧。。
    BoringTu
        27
    BoringTu  
    OP
       2021-05-06 15:16:04 +08:00
    @intmax2147483647 我是 java 出身,就是因为 js 的弱类型,所以毅然决然的转做前端了(手动抠鼻
    也因为我转行的理由,所以不能接受 ts 。。
    ayase252
        28
    ayase252  
       2021-05-06 15:16:17 +08:00
    1. 在大型项目里,有类型维护起来就是比无类型爽。特别是在项目没文档的情况下,类型约束要比打 console.log 看一个东西里面有什么,从效率与可靠性上都高上不少;
    2. TS 发展多年,工具链非常完善;
    3. 类型约束会倒逼程序员思考怎么设计 API 更加合理,而不是一个函数全部东西一把梭就完事了。
    littlemcdull
        29
    littlemcdull  
       2021-05-06 15:17:06 +08:00   ❤️ 30
    "大哥,你是个程序员,你连自己写的代码是怎么跑的都不知道的话,转行好吗?"
    看到这句话就想笑了,这哥们估计一直是一个人在开发小项目,至少没去过大公司,要知道大公司 N 手祖传代码,你肯定不能在短时间内弄懂怎么跑的,绝大部分代码不是自己写的,一直也想不通 js 这种语言是怎么流行起来的,想改个代码还必须要把相关业务 log 调试出来才行,简直浪费生命,根本不适合多人协作的项目
    Leviathann
        30
    Leviathann  
       2021-05-06 15:17:14 +08:00
    一个简单的场景,老代码里有一坨 lodash 的 chain 操作,map,mapKeys, mapValues,reduce 来回穿插,没有 ts 的时候怎么快速看懂这坨代码最终得到了什么

    静态类型系统可以说是一个已被长期实践验证的正确设计,表达能力强大的类型系统是一个现代编程语言的典型特征之一

    说起来就我听说过的新生代编程语言,好像就 elixir 是动态的
    其他包括什么 nim crystal V 都有静态类型系统,更别说那些纯函数的语言了
    BoringTu
        31
    BoringTu  
    OP
       2021-05-06 15:18:41 +08:00
    @kop1989 我也是这么想的,都是所谓大厂带出来的风气
    x940727
        32
    x940727  
       2021-05-06 15:18:42 +08:00
    @Leviathann 小儿科?哪里小儿科了?
    ianva
        33
    ianva  
       2021-05-06 15:19:43 +08:00
    类型的推导就是对代码的证明,如果不理解这一点,本质上是没有理解什么是编程
    Rwing
        34
    Rwing  
       2021-05-06 15:21:06 +08:00
    @BoringTu 是的。又回到最开始说的,因为强类型更适合大型多人协作的项目
    plk403
        35
    plk403  
       2021-05-06 15:21:23 +08:00
    我当然知道自己写的啥代码啦,但是别人不知道我写的啥,我也不知道被人写的啥
    BoringTu
        36
    BoringTu  
    OP
       2021-05-06 15:22:51 +08:00
    @learningman 但是并不需要啊。。
    我虽然不是有笔记本文档写代码吧,不过也是常年 vim,顶多需要一个自动补全,而且也只是补全当前文档中存在的单词以防打错,而不是像 java 的各种 IDE 那样要点出这个对象后面所有的属性
    yEhwG10ZJa83067x
        37
    yEhwG10ZJa83067x  
       2021-05-06 15:23:58 +08:00
    @BoringTu
    #14 "你肯定是用 windows 的吧,你不觉得 windows 用起来浑身难受么"
    关键在人,而不是工具,玩 windows 照样可以玩的顺风顺水
    k9982874
        38
    k9982874  
       2021-05-06 15:27:29 +08:00
    楼主写了 11 年 JS,但是不是人人都写了 11 年 JS 。尤其是资本家喜欢节约成本顾应届生或初级开发的情况下,大片的 copy/paste,产品再加把火“这个功能改改就上”,导致项目质量堪忧。
    这时候 TS 就可以补上短版,让 leader 少死点脑细胞,在不能骂人的情况下,一句照规范来省好多口水。
    learningman
        39
    learningman  
       2021-05-06 15:28:24 +08:00
    @BoringTu #36 ???
    你写代码不用三方库和框架的吗?
    用一个新框架还得背 API 了
    TomatoYuyuko
        40
    TomatoYuyuko  
       2021-05-06 15:29:05 +08:00
    喜欢用就用嘛,不喜欢就不用,写代码的是人不是工具
    我小团队人员固定就不愿意用 ts,大项目见仁见智吧
    EPr2hh6LADQWqRVH
        41
    EPr2hh6LADQWqRVH  
       2021-05-06 15:29:25 +08:00   ❤️ 24
    您这十一年算是白搭了
    BoringTu
        42
    BoringTu  
    OP
       2021-05-06 15:33:14 +08:00
    @hronro [即使你可以记住你代码的每一个细节,但一个项目通常不只是你一个人在写,你能清楚的记住每一个别人写的函数的签名吗?] 这句话我也不敢苟同。不需要记住项目里的各种细节啊,我脑容量还没这么大,而且也没必要啊。项目当然不是一个人在写,而且基本上都是所有人的代码可能都会改到,也没碰到什么问题啊?以及你所谓的“函数签名”(咋聊着 js 还弄出这么个词。。)函数名以及变量名要语义化,这是项目管理以及员工培训的内容,跟语言有个锤子关系?退一步说,定期或者不定期代码 review,或者查看 commit 改动也能看到问题。因为这些理由就必须要选 ts ?这是啥逻辑。。而且如果员工就是这种人的话,就算让他用 ts 了,代码质量就高了?不见得吧?
    chouchoui
        43
    chouchoui  
       2021-05-06 15:33:23 +08:00   ❤️ 6
    亏你们能和一个不进行代码格式化的人扯了半天😂
    haw86104
        44
    haw86104  
       2021-05-06 15:33:42 +08:00
    其他不谈,我还真遇到不少第三方库使用起来,对变量类型定义差别的 bug
    huijiewei
        45
    huijiewei  
       2021-05-06 15:34:41 +08:00
    放出你的 GITHUB 。哪怕代码片段也行

    否则当你用嘴放屁
    kingwl
        46
    kingwl  
       2021-05-06 15:34:59 +08:00
    > 本身弱类型为优势的 JavaScript (并不是优势)

    > 套了一层强类型的壳的这步操作我就看不懂了,这是图啥呢?(并不是强类型)

    > 这样代码写着不难受么?那你直接用 Java 写然后编译成 JavaScript 不好么?(不难受,不好,Java 也不是强类型)
    charlie21
        47
    charlie21  
       2021-05-06 15:35:19 +08:00
    Angular 是 ts only 的前端框架,若不用 Angular 可以不写 ts
    youxiachai
        48
    youxiachai  
       2021-05-06 15:35:52 +08:00
    @BoringTu 用个 windwos 都能扯? 我三平台的机子都有啊...大哥其实我写 flutter 的....
    yyfearth
        49
    yyfearth  
       2021-05-06 15:36:44 +08:00
    @BoringTu TS 以及强类型的好处就是减少对接时候的错误
    如果你自己一个人写代码 对接问题是你自己的问题 这样用弱类型优势非常大 加上 JS 本来一开始开发的时候就不是开发给大型项目的
    直到 ES6 的出现之前 前后端分离加上各种打包工具的 SPA 项目出现 项目越来越大 开发团队越来越大和多 不同团队开始合作
    因为 JS 不是为了大型复杂项目设计的 ES 弥补了一些不足 但是根本上缺少强类型的约束
    导致一个开发或者团队私自修改接口 另一个开发或者团队不知道 导致的运行时错误
    而 TS 把这个错误提前到了编译时 就可以暴露出来 减少了线上的问题

    我长期以来一直是支持 ES 胜过 TS 的 就是因为灵活性
    但是现在项目越来越大 越来越多的项目开始进行整合 以前的好多小项目 慢慢整合成一个超大的项目
    这时候我就非常希望大家都开始用 TS 也就不至于那么多 bug 要上 QA 环境手动测试 甚至上线后才被发现
    虽然单元测试可以缓解 JS 的问题 但是 TS 让单元测试不需要考虑类型不匹配的问题

    而 coffee 仅仅是更多的语法题 这个 ES 已经实现了大半 而且现在大家都用 babel 来转译
    你需要的语法题可以直接用在 TS 或者 JS 上面 这样以来就不需要另外一个语言了
    coffee 的本质就是通过转译工具的语法题而已 用 babel 或者 ts 的插件也能做到很多类似的效果了
    加上会 coffee 的人比较难找 而且不够流行 现在除了一些 ruby 的项目 用 coffee 的已经基本上没有了
    revlis7
        50
    revlis7  
       2021-05-06 15:37:50 +08:00
    一个人写东西,和一群人写东西是两码事。我恨不得所有人的代码风格都和我一样,因为就像你说的:“我当然知道自己写的啥代码啦”,但问题就在于别人会这么做吗,你如何保证多数人的水平在一个相近的 Level 上?在公司里做项目,我觉得成本最高的往往是沟通环节。
    coolcoffee
        51
    coolcoffee  
       2021-05-06 15:39:47 +08:00
    强类型带来的好处就是 IDE 变得更加智能,如果 npm 的 package 带了.d.ts ,调用各种方法都不用查 api,等待 IDE 智能补全就 OK 。webstorm 虽然对普通的 js 也会尝试推断,但是远远没有带了.d.ts 定义来的准确。


    js 的入门门槛实在是太低了,导致很多人进来就只会 js 基础,我们可以自动脑补强类型,但是不能保证团队其他成员能够跟上。通过类型系统结合 CI,尽可能的避免各种低级错误,提升整体开发效率才能最重要的。
    Leviathann
        52
    Leviathann  
       2021-05-06 15:41:29 +08:00
    @x940727
    Intersection Types
    Union Types & Discriminated Unions (aka "Algebraic Data Types.")
    String Literal Types
    Polymorphic this Types
    Index Types
    Mapped Types
    网上随便搜到的,这些类型 java 里有几个。。
    另外搜 typescript 类型系统 图灵完备 有很多好玩的东西
    DOLLOR
        53
    DOLLOR  
       2021-05-06 15:42:25 +08:00
    我以前也热衷 coffeescript 这种玩意,毕竟语法糖看上去用起来挺舒服的。
    但后来开发的时候多次遇到一些问题,用它做开发,会带来一些不舒服的心智负担,后来就不再用 coffeescript 了。
    比如 coffeescript 没有 var let const 这些声明关键字,当你写下 somedata = 1 的时候,不仔细看上下文,你是不知道你的代码是在声明一个新的变量,还是修改外层的变量。这在小项目里也许不是事,但是在大项目里,有很多层函数嵌套的时候,那就很麻烦了。

    coffeescript 官网是这样解释的:
    Because you don’t have direct access to the var keyword, it’s impossible to shadow an outer variable on purpose, you may only refer to it. So be careful that you’re not reusing the name of an external variable accidentally, if you’re writing a deeply nested function.
    yyfearth
        54
    yyfearth  
       2021-05-06 15:43:06 +08:00
    @BoringTu 另外 当项目大到一定程度 或者是由不同团队开发的组件集成
    “代码 review,或者查看 commit 改动” 根本不可能 要么脑子不够 要么可能根本看不到

    看不到 TS 的优势 只能说明项目本身规模不够大 你一个人的大脑还是可以 handle 项目的大部分接口
    当接口是跨团队的时候 大部分情况你已经没办法看到对方的代码了 接口都开始用文档来记录和沟通
    而 TS 的强类型 就相当于把文档写在了代码里面 而且 IDE 和 CI 都可以帮助你提前发现接口的问题

    用强类型的 TS 会让菜鸟更难写出代码 但至少写出的代码会有一定程度更好的保障
    BoringTu
        55
    BoringTu  
    OP
       2021-05-06 15:44:32 +08:00
    @ayase252
    1. 什么情况下会出现你不知道这个变量里面有什么的情况?我试想一下,可能有这种情况:变量 count,值是 12,但你不确定是 12 还是 '12' 对吧?如果是这种情况,如果只是显示,我就不做任何处理,如果需要做加法计算,我会在变量名前面加个加号,如果是加法以外的其他计算,还是不做任何处理(当然我还是会习惯性加上加号);那也许是另一种情况,变量 time,你不确定是长这样 1620286713316,还是长这样'2021-05-06 15:38:59',首先这种问题是接口定义问题,其次你用 ts 也只是报错提示你类型错误,但这问题不需要 ts 一样可以马上发现吧?那还有其他什么情况呢?
    2. 如果我不用,再完善跟我也没关系啊。。话反过来说,coffee 一样很完善啊,而且还有其他选择,为啥要选 ts ?
    3. 你说的情况只会出现在前后端都自己做的前提下。如果你只写前端,人家后端凭什么要因为你用了 ts 报错了就要改自己接口代码?你跟人家说接口这样设计不合理,人家就会问你你就说能不能用吧,然后你俩再干一架?你这个理由只能是阻碍项目进度的理由啊。。
    BoringTu
        56
    BoringTu  
    OP
       2021-05-06 15:45:50 +08:00
    @littlemcdull 我看到你说的这句话也笑了,yy 的爽么?
    多看别人说话,自己少插嘴,给你个建议
    BoringTu
        57
    BoringTu  
    OP
       2021-05-06 15:48:19 +08:00
    @ianva 哦豁,你这句话只能暴露出你对弱类型一无所知。。(怎么莫名其妙就开喷了呢兄 dei ?
    g00001
        58
    g00001  
       2021-05-06 15:50:08 +08:00
    “你肯定是用 windows 的吧,你不觉得 windows 用起来浑身难受么。。” 看到这句惊到了,你自己用一下 Windows 就浑身难受可以理解,为啥其他用 Windows 就得跟你一起浑身难受呢?! Windows 是靠用一下就浑身难受占领了桌面系统最大的市场?!
    BoringTu
        59
    BoringTu  
    OP
       2021-05-06 15:50:14 +08:00
    @learningman ???
    你用第三方库不看文档直接打点就用??
    BoringTu
        60
    BoringTu  
    OP
       2021-05-06 15:51:48 +08:00
    @avastms 您说您这一句疑似喷人的话,后面就没下文了,是不是找骂的。。
    您到底说一些论据来支撑前面这句论点啊
    BoringTu
        61
    BoringTu  
    OP
       2021-05-06 15:52:56 +08:00
    @haw86104 来,咱来聊聊因为格式化代码导致被打的话题吧,你平时都是用什么来护身的?
    BoringTu
        62
    BoringTu  
    OP
       2021-05-06 15:55:14 +08:00
    @huijiewei ??说 tm 啥呢在这?
    BoringTu
        63
    BoringTu  
    OP
       2021-05-06 15:56:50 +08:00   ❤️ 1
    @kingwl 对于你来说,弱类型不是优势,因为你不会用,这个道理不懂?
    不会用当然就不是优势啊,这句话放在其他地方也是一样的啊。。
    nnnToTnnn
        64
    nnnToTnnn  
       2021-05-06 15:56:55 +08:00
    @BoringTu TypeScript 最大的优点就是 type. 在加上 vscode 对 ts 的大力支持, 以及 ts-node 的支持.

    例如你开发一个程序, 使用 TypeScript 几乎可以减少你百分之 50 左右的工作量.


    1. 定义好类型.
    2. vscode 可以根据类型来辅助你进行开发
    3. 在编译之前, 就可以检测出来你的代码逻辑问题.
    4. 上手简单

    至于 coffeescript 和 typescript 相比, 大部分人应该都是喜欢 typescript 的, 只要你会 js 那么上手 ts 就很容易, 但是 coffeescript 几乎就是另外一门语言了. 我经常 ts 和 js 切换, 没感觉语法上有多大差异, 只是觉得写 js 没有 ts 的语法提示效率高.

    学 coffeescript 几乎重新在学一门语言, 而且我不是很喜欢 coffeescript 的语法.
    timedivision
        65
    timedivision  
       2021-05-06 15:57:59 +08:00   ❤️ 1
    举个简单的例子,一个接口返回十几二十个字段,你在编码阶段把这个接口的返回值用 interface 定义好,等你过个十天半个月回来改这里的代码的时候,你通过 interface 可以立马就知道接口的返回值有哪些字段、都是啥意思,而不用去翻之前的接口文档
    Imindzzz
        66
    Imindzzz  
       2021-05-06 15:59:14 +08:00   ❤️ 2
    虽然你有故意的引战嫌疑,但还是真诚的和你交流一下吧。

    人生苦短,多用代码提示

    先不说团不团队的,调用一个第三方库,别去记具体的拼写。
    敲一个 useH 在下拉框中选择 useHistory,编辑器自动 import 进来,就挺香的。

    ```js
    import { useHistory } from 'react-router';
    const history = useHistory();

    ```
    zzlatan
        67
    zzlatan  
       2021-05-06 15:59:16 +08:00
    我觉得是前端瞎折腾
    jeffwcx
        68
    jeffwcx  
       2021-05-06 16:00:49 +08:00
    举一个例子,之前我用 js 写前端,使用第三方组件库的时候,动不动就要看下文档;之后我自己用 ts 写了组件库,大部分组件都能自动引入,组件的属性都能智能给出提示。这样看组件文档时间就减少了很多了,开发效率也大大增加,后人维护起来也很方便。
    kingwl
        69
    kingwl  
       2021-05-06 16:01:15 +08:00
    > People percieve TypeScript as "just the compiler", but it's a better mental model to think of TypeScript as two separate entities: The compiler (aka syntax) and language tools (aka editor integration) - by treating these two systems as separate you have two important perspectives to understand decisions get made.

    https://orta.io/notes/js/why-typescript
    BoringTu
        70
    BoringTu  
    OP
       2021-05-06 16:03:08 +08:00
    @revlis7 你说的理由我接受~
    nnnToTnnn
        71
    nnnToTnnn  
       2021-05-06 16:03:28 +08:00
    @nnnToTnnn 我说说我实际的场景.

    我自己写了一个封装一个组件. 我很清楚组件的功能

    如果用 JS 封装的. 那么我使用几乎是这样的.


    1. 切换到代码 /文档,
    2. 在切换到代码
    3. 查看属性,方法名称
    4. 复制粘贴,上去然后进行逻辑编写.

    如果用 ts 写, 那么我的操作变成这样了

    1. alt + / 或则打一个.
    2. 选择属性查看说明,然后按 enter


    用起来很舒服. 其次第二个方面. 很多时候 ts 能在编译之前就能帮你纠正很多错误,而不是在运行的时候
    learningman
        72
    learningman  
       2021-05-06 16:03:42 +08:00
    @BoringTu #59 对啊,看个 get started 然后边用边看啊。。。有类型推导用起来多舒服
    wangxiaoaer
        73
    wangxiaoaer  
       2021-05-06 16:05:20 +08:00
    "你肯定是用 windows 的吧,你不觉得 windows 用起来浑身难受么。。"


    我每次用 mac 都想死,用 win 的时候感觉要起飞。
    jeffwcx
        74
    jeffwcx  
       2021-05-06 16:06:23 +08:00
    @kop1989 github 开源没什么问题吧,真做得好的肯定青睐啊,只是不要太执着于 star 数
    BoringTu
        75
    BoringTu  
    OP
       2021-05-06 16:06:40 +08:00
    @coolcoffee 不不不,是 js 入门门槛低,导致大部分人连基础都没有的。。这个我深有体会。。
    差不多到现在也面了几百个人了,而且尤其前一阵我面了一个工作十年的,数据结构和算法没一个了解的,冒泡排序逻辑都说不出来,对象赋值给变量问他这个变量存的是啥他也不知道。。都服了
    ayase252
        76
    ayase252  
       2021-05-06 16:08:03 +08:00
    @BoringTu
    > 什么情况下会出现你不知道这个变量里面有什么的情况?
    在遗留代码(没有单元测试的项目,大部分项目处于这个阶段)里,动大多数代码的时候都会出现这样的情况。因为你只能掌握系统的部分知识。

    > 如果我不用,再完善跟我也没关系啊。。话反过来说,coffee 一样很完善啊,而且还有其他选择,为啥要选 ts ?
    主题是「为什么你们要选择 TypeScript ?」。说实话国内有很多工具链还没完善的东西就拿出来上生产环境了,像小程序。

    > 如果你只写前端,人家后端凭什么要因为你用了 ts 报错了就要改自己接口代码?
    这里的 API 设计不是指前后端交互的 API,而是指前端内部自身的函数 /模块设计。在 JS 中,一个函数超过一个职责、中间再来一点副作用的现象不少见。但是换成 TS,可能函数的类型声明都没法写,这就倒逼了前端本身的架构设计。
    BoringTu
        77
    BoringTu  
    OP
       2021-05-06 16:08:11 +08:00   ❤️ 1
    @yyfearth 其实对我来说痛点就是。。coffee 无论我觉得有多好用,但结果就是越来越没有市场了。反而我不看好的 ts 用的人越来越多。。其实我发这帖子也只是发泄一下,然后还是得入 ts 的坑。。就很难受。。
    hello2060
        78
    hello2060  
       2021-05-06 16:10:00 +08:00 via iPhone   ❤️ 2
    写了 15+年的代码,越来越感谢自己是个让干啥干啥没别的想法的人,不像各位这语言不行那语言恶心的。无知有时也是优势啊😄
    nnnToTnnn
        79
    nnnToTnnn  
       2021-05-06 16:10:01 +08:00
    用 js 或者用 ts , 其实用不用,最后你都要补全类型, 参照 facebook 的 react 项目. ts 只是帮你减少的时间, 减轻了你的编程压力.

    至于 coffeescript , 如果也能想 ts 一样 被各个编辑器大力支持, 其实也会很流行. 不过 coffeescript 明显走偏了.

    引用 nginx 的一段话


    I’ve been wanting to add more scripting capabilities to NGINX for a long time. Scripting lets people do more in NGINX without having to write C modules, for example. Lua is a good tool in this area, but it’s not as widely known as some other languages.

    JavaScript was the most obvious language to add next. It’s the most popular language – #1 on GitHub for the past three years. JavaScript is also a good fit for the way we configure NGINX.
    BoringTu
        80
    BoringTu  
    OP
       2021-05-06 16:11:19 +08:00
    @DOLLOR 你说的这个,其实稍微注意一下就没有问题了哇,我从 coffee1 用到现在 coffee2 也是有年头了,习惯这东西了之后就没出现过这种问题~
    IvanLi127
        81
    IvanLi127  
       2021-05-06 16:12:21 +08:00
    “大哥,你是个程序员,你连自己写的代码是怎么跑的都不知道的话,转行好吗?”
    JoStar
        82
    JoStar  
       2021-05-06 16:13:18 +08:00
    也许是楼主真的太强了,不需要强类型语言带来的优点。

    但是这么强的程序员并不主流,所以大家都用 ts 了。
    IvanLi127
        83
    IvanLi127  
       2021-05-06 16:13:44 +08:00
    @IvanLi127 多人协作的话还得知道别人写的代码怎么跑的。(换行不小心发出去了。。。。)
    BoringTu
        84
    BoringTu  
    OP
       2021-05-06 16:14:07 +08:00   ❤️ 1
    @g00001 兄 dei,你不了解 windows 的历史?为啥会占领大部分市场的原因你不清楚?
    是因为好用吗?哥们,是因为捆绑,是因为盗版,是因为思维惯性,但真跟好用扯不上关系
    powerfulyang
        85
    powerfulyang  
       2021-05-06 16:14:08 +08:00
    这不就是典型的不喜欢就毁灭?
    Imindzzz
        86
    Imindzzz  
       2021-05-06 16:14:38 +08:00
    你有一个大前提就是“js 的弱类型是优势”,

    说来说去都是在讨论“类型有啥用” ,你可以有自己的实际场景和理解,但是从评论中你也看出来了,大家都更喜欢强类型。约束自己也约束团队。

    @hronro 说的问题,你说可以通过培训和 review 来解决。
    是,人肉解决是可以,但是编译器就能解决的事,为什么要去浪费时间人肉做呢。

    review 代码的时间用找 bug 吗,用来交流编程技巧不好吗。

    ----

    说到这里我问一句题外话,你用团队有使用 CI/CD?
    jeffwcx
        87
    jeffwcx  
       2021-05-06 16:22:02 +08:00
    @zzlatan 起码比 jQuery 时代好多了,我也是从 jQuery 时代走过来的,我所看到的是前端工程化程度越来越高(更多人能开发复杂项目,参与多人协作项目更简单),能做的东西越来越多,可以搞后端,可以搞 RN,这意味着职业天花板上升了。所以尽管前端领域发展过程中有浮躁,但并不是瞎折腾,一个明显的例子就是 react 的 jsx 写法已经深刻影响了移动开发领域,swiftui,jetpack compose
    h82258652
        88
    h82258652  
       2021-05-06 16:24:59 +08:00
    没学过 coffee
    ts 类型对大型项目有很大好处的,小项目确实不如 js 开箱即用爽
    不知道楼主听过这么一句话没有:动态类型一时爽,代码重构火葬场

    let a = 1;
    let b = "1";
    let c = a + b;
    像这种 js 直接就给你跑上去了,但事实上这样的代码报错才是应该的,类型不一致就不应该相加

    至于 ts 的语法糖,那些都是其次的了
    chanchan
        89
    chanchan  
       2021-05-06 16:25:53 +08:00   ❤️ 3
    错的是这个世界!
    jeffwcx
        90
    jeffwcx  
       2021-05-06 16:29:07 +08:00
    @h82258652 ts 好像没有啥语法糖,都是 es 的语法糖,其实就是类型系统
    lingo
        91
    lingo  
       2021-05-06 16:32:43 +08:00
    变相迫使个人在开发的时候付出更多的精力,写出隐藏在代码里的文档,从而降低整个团队的成本。
    就像弱类型,可以有各种方便的用法,或者写出骚气的代码,可以是优点,你也觉得是有点,但是爽了自己,别人接手的时候就难受了。
    代码写的灵活,对个人是好事,对团队不一定。
    LeeReamond
        92
    LeeReamond  
       2021-05-06 16:34:30 +08:00
    大概本质还是因为前端程序员的水平差距像海一样深吧。。es6 之后,在良好的编码规范和良好的注释下其实可以达到 ts 相同效果(由于没到语言级别规范,IDE 补全方面会有缺失,不过总体而言堪用)。但实际项目中很难要求前端程序员严格遵守这些规则,由此产生了屎山。
    yhxx
        93
    yhxx  
       2021-05-06 16:34:55 +08:00
    我觉得 TS 带来的最大提升是代码提示
    至于什么减少因类型导致的错误。。。
    dqzcwxb
        94
    dqzcwxb  
       2021-05-06 16:36:32 +08:00
    3dwelcome
        95
    3dwelcome  
       2021-05-06 16:37:55 +08:00
    @BoringTu "兄 dei,你不了解 windows 的历史?为啥会占领大部分市场的原因你不清楚?
    是因为好用吗?哥们,是因为捆绑,是因为盗版,是因为思维惯性,但真跟好用扯不上关系"

    我去 google 了一下 windows 市场占比

    個人電腦作業系統市占率統計
    82.96% Windows
    12.49% macOS
    1.72% Linux
    0.51% Chrome OS

    这不仅仅是历史原因,macOS 出道也很早,可就是 Windows 软件开发更方便。
    这就是 TS 主流一个道理,你自己一个人觉得 WINDOWS 不好用这不重要,关键大家觉得 Windows/TS 好用。
    g00001
        96
    g00001  
       2021-05-06 16:38:43 +08:00
    别人用 Windows 是因为觉得用 Windows 浑身难受?
    别人盗版 Windows 是因为盗版 Windows 浑身难受?
    别人用 Windows 是因为不了解 Windows ?
    Windows 占领桌面市场最大份额是因为 …… 是因为 …… 是因为 ……
    大概明白你为什么反感 TypeScript 了,

    对了,
    即然你因为孩子忙到没时间用 Windows 娱乐( 浑身难受 ),
    怎么有时间上 V2 忙活一天不去多陪陪孩子。
    rioshikelong121
        97
    rioshikelong121  
       2021-05-06 16:39:39 +08:00   ❤️ 13
    看着像是一个工作了十一年的一年经验程序员。
    x940727
        98
    x940727  
       2021-05-06 16:43:21 +08:00
    @Leviathann 这些东西设计的这么复杂是因为 JavaScript 的问题,实际上这么复杂的类型系统会带来更复杂的编程问题啊……如果按照你说的这些东西,别的语言甚至连对象都创建不出来,JavaScript 可以,所以 typescript 才需要这么复杂的类型系统……
    Imindzzz
        99
    Imindzzz  
       2021-05-06 16:44:43 +08:00   ❤️ 1
    https://github.com/boringtu/srsdk/blob/master/src/thr-sdk.coffee

    wx.getBLEDeviceCharacteristics

    就比如你这段代码,你是直接记的拼写?还是直接去文档复制?

    有 ts 的话,就可以只敲一个 wx.getB 就代码补全了。
    然后要什么参数直接按住 ctrl 点击函数名进去看定义。
    justin2018
        100
    justin2018  
       2021-05-06 16:48:04 +08:00
    js 100 个人有 100 中写法 滑稽 😁
    1  2  3  4  
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1015 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 32ms · UTC 23:09 · PVG 07:09 · LAX 15:09 · JFK 18:09
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.