V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
fancy2020
V2EX  ›  程序员

没人觉得 TS 的代码非常丑吗..

  •  
  •   fancy2020 ·
    fanchangyong · 2020-04-09 23:05:40 +08:00 · 19127 次点击
    这是一个创建于 1721 天前的主题,其中的信息可能已经有所发展或是发生改变。

    我个人非常讨厌 TS,奈何现在很多第三方库都在使用 TS 了,所以也不得不接触,平时看代码的时候看到一坨坨冗长的类型定义,真的看得非常累..

    第 1 条附言  ·  2020-04-10 10:00:14 +08:00
    164 条回复    2020-04-14 19:11:25 +08:00
    1  2  
    myd
        1
    myd  
       2020-04-09 23:06:52 +08:00   ❤️ 2
    我不是一个人
    wunonglin
        2
    wunonglin  
       2020-04-09 23:11:04 +08:00   ❤️ 32
    只恨 ts 不能取代 js
    fancy2020
        3
    fancy2020  
    OP
       2020-04-09 23:11:33 +08:00   ❤️ 4
    另外,丑倒是还其次,关键严重影响可读性。。核心逻辑代码都被隐藏在一坨坨的类型定义中了
    JS 好好的一个动态语言被硬生生掰成静态语言,这合适吗!
    #旗帜鲜明的反对 TS#
    murmur
        4
    murmur  
       2020-04-09 23:16:54 +08:00   ❤️ 1
    是很丑,这不是说语言的问题,是非得要特性就造新语言,有 java 有 c#的模板不用,非得单独发明一套语法,都是强类型,大家长的都差不多,然而长的又不一样
    XanderChen
        5
    XanderChen  
       2020-04-09 23:17:35 +08:00
    所以 ts 说的是 typescript 吗?
    maomaomao001
        6
    maomaomao001  
       2020-04-09 23:20:04 +08:00 via Android   ❤️ 1
    也不丑吧,很多类型都会自动推断了,
    EPr2hh6LADQWqRVH
        7
    EPr2hh6LADQWqRVH  
       2020-04-09 23:21:41 +08:00   ❤️ 5
    我个人非常讨厌 JS,奈何现在不愿意学 TS 的人太多,所以也不得不接触,平时看代码的时候看到一坨坨层层叠叠的嵌套函数调用穿插对象定义,真的看得非常害怕..
    fancy2020
        8
    fancy2020  
    OP
       2020-04-09 23:25:03 +08:00
    @avastms 讨厌 TS !== 不愿意学 TS,恰恰是学了之后觉得很讨厌~
    cmdOptionKana
        9
    cmdOptionKana  
       2020-04-09 23:27:11 +08:00   ❤️ 2
    python 和 php 都官方直接加上了 type hint,ruby 也计划加上。另外较受欢迎的新语言 kotlin, go, swift, rust, dart 等无一例外都是静态类型。也就是说,这些语言全都有 “一坨坨冗长的类型定义”。

    美丑很主观,但业界这样发展、语言大牛和大公司这样的选择,应该可以说明 “一坨坨冗长的类型定义” 比简洁的动态类型语言有优势。
    pursuer
        10
    pursuer  
       2020-04-09 23:27:40 +08:00
    有好用的 IDE,ts 的使用体验会很好
    SilencerL
        11
    SilencerL  
       2020-04-09 23:27:59 +08:00
    非常非常丑, 建议楼主不要用 TS, 真的太丑了
    chihiro2014
        12
    chihiro2014  
       2020-04-09 23:28:09 +08:00
    其实还好吧,作为后端人员表示 ts 还是蛮香的
    qiguai2017
        13
    qiguai2017  
       2020-04-09 23:28:15 +08:00
    确实很不习惯 TS 的类型定义
    fancy2020
        14
    fancy2020  
    OP
       2020-04-09 23:31:07 +08:00
    @cmdOptionKana 感谢~你说的这个论点很客观,我思考一下
    Yelp
        15
    Yelp  
       2020-04-09 23:36:46 +08:00 via iPhone   ❤️ 1
    以前俺也觉得,直到遇到了 Go 和 VSCode
    Kahnn
        16
    Kahnn  
       2020-04-09 23:41:01 +08:00
    作为一个 Java 后端,现在刚开始用 TypeScript,觉得还不错啊,虽然类型声明在后面有点不太习惯
    janxin
        17
    janxin  
       2020-04-09 23:41:25 +08:00
    没办法,我觉得丑的地方 js 也是这么丑
    Perry
        18
    Perry  
       2020-04-09 23:44:41 +08:00   ❤️ 1
    等你有一天工作看到屎山 JS 代码库的时候你是不是又要说 TS 香?
    VDimos
        19
    VDimos  
       2020-04-09 23:50:50 +08:00 via Android   ❤️ 1
    ts 可比乱写的 js 好看多了
    crella
        20
    crella  
       2020-04-09 23:51:09 +08:00 via Android
    主要是在浏览器内只能用 js (在没有 webassembly 之前)

    所以只能在 js 的基础上修修补补喽。
    Tink
        21
    Tink  
       2020-04-09 23:51:49 +08:00 via iPhone
    确实那一大坨类型声明看的心累
    Conda
        22
    Conda  
       2020-04-09 23:53:05 +08:00
    是丑还是不愿意学呢? 个人觉得 TypeScript 给了 js 新的生命
    fancy2020
        23
    fancy2020  
    OP
       2020-04-09 23:55:08 +08:00   ❤️ 5
    最烦的就是,很多人认为讨厌 TS 的人===没用过静态类型语言的。
    本人工作 12 年,刚开始工作做过 5 年 C++游戏后端,所以我明白静态语言有哪些好处,我更明白动态语言有自己的特点,
    不喜欢一门好好的动态语言被静态化。
    fancy2020
        24
    fancy2020  
    OP
       2020-04-09 23:56:51 +08:00
    @VDimos 乱写和语言无关,静态语言一样可以写出屎一般的代码
    zzzzzzggggggg
        25
    zzzzzzggggggg  
       2020-04-10 00:04:43 +08:00
    可能是不习惯
    tinycold
        26
    tinycold  
       2020-04-10 00:05:51 +08:00 via Android   ❤️ 3
    The Shy 的剑魔的确强,至于代码我没看过不好评价。。
    charlie21
        27
    charlie21  
       2020-04-10 00:12:06 +08:00
    谁叫你盯着看了?
    2kCS5c0b0ITXE5k2
        28
    2kCS5c0b0ITXE5k2  
       2020-04-10 00:14:07 +08:00
    有一说一 类型定义很喜欢。 我写 php 都习惯加上类型定义.
    cmdOptionKana
        29
    cmdOptionKana  
       2020-04-10 00:14:46 +08:00
    @fanchangyong 并不是动态语言被静态化。

    1. TS 本质上是另一门语言,它不是 JS,只是为了获得 JS 的生态而对 JS 做了一些兼容。

    2. 由于个人电脑的性能与前端技术的发展,现在 JS 需要承受的负荷已经与它刚被发明出来时不一样。动态语言是好,但它只适合中小型项目,而现在前端项目已经变得非常复杂。

    如果 JS 是现在被发明出来的,它更可能是静态类型,而不是动态类型。
    gouflv
        30
    gouflv  
       2020-04-10 00:18:28 +08:00 via iPhone
    楼主这样的应该叫做 脚本男孩
    nvkou
        31
    nvkou  
       2020-04-10 00:21:02 +08:00 via Android
    工程量的问题吧。
    如果 js 止步于网页脚本,它是十分轻便称职的。
    现在又要用来写工程。那它必须要面对分工,解耦等各种前人的坑。

    个人还是十分不愿意看到嵌套太深,就地 function 的恣意妄为风格
    love
        32
    love  
       2020-04-10 00:57:11 +08:00 via Android
    静态类型真香
    不过 ts 类型灵活性比 java 强太多了,导致复杂的类型定义比较难读。
    tyrealgray
        33
    tyrealgray  
       2020-04-10 01:12:14 +08:00
    会用 TS,但是真不喜欢那模版定义类型的写法。比 C++的模版格式感觉远了,确实写多了就觉得 ts 的看起来很丑
    JackWolf001
        34
    JackWolf001  
       2020-04-10 01:24:55 +08:00 via iPhone
    ts 语法相对 c,java 一开始看起来是挺累的,习惯了就还好
    ppphp
        35
    ppphp  
       2020-04-10 01:46:19 +08:00
    一点也没觉得影响可读性了,引入新的库,加上类型一眼就能看出来容器的方法,以前新上手一个库,javascript 完全抓瞎,现在 typescript 能让我一天上手 angular,react,楼主应该换一个支持 ts 比较好的编辑器了,其实这些对我来说都没有 css 难写。。。。
    有 void*和多态,包括类型写变量前面的语法,导致我觉得 c++非常不好看懂。。。
    ochatokori
        36
    ochatokori  
       2020-04-10 01:46:47 +08:00 via Android
    运行一下 tsc 就可以把类型去掉看你喜欢的 js 了
    不过一般发布的库都是导出 js+.d.ts 不会直接导出 ts 吧
    yech1990
        37
    yech1990  
       2020-04-10 06:00:34 +08:00 via Android
    其实你只要把类型注释的 syntax 颜色改成灰色就行,能极大提升阅读的体验。
    wuhanchu
        38
    wuhanchu  
       2020-04-10 08:05:38 +08:00 via iPhone
    同样不喜欢 ts 但是如果你们开发大项目还是建议上。新生的 js 写起来才是真的丑
    kios
        39
    kios  
       2020-04-10 08:10:17 +08:00
    TypeScript 很好用啊 怎么丑了
    fancy2020
        40
    fancy2020  
    OP
       2020-04-10 08:17:43 +08:00 via iPhone
    大型项目上 TS 可以理解,但是现在很多几百上千行的项目也用 TS 我就理解不了了
    April5
        41
    April5  
       2020-04-10 08:41:59 +08:00
    你自己写代码想怎么写无所谓,但如果你的代码可能要给人接盘的,和人协作的,那 ts 和你的项目几行几百行几千行关系并不大,搭个环境又不难,又有 sourcemap,至于丑,见仁见智,这并不能妨碍大家使用它。
    Yumwey
        42
    Yumwey  
       2020-04-10 08:45:22 +08:00 via Android
    你不是觉得丑,你是觉得写的太多了😄
    oahebky
        43
    oahebky  
       2020-04-10 08:47:09 +08:00
    “冗长的类型定义” 你平时写 python ?

    哈哈哈哈哈哈哈哈哈
    oahebky
        44
    oahebky  
       2020-04-10 08:49:05 +08:00   ❤️ 2
    我个人坚信语言往静态发展是倒退。往动态发展是进步。
    谈不上大道理,就是自觉。
    oahebky
        45
    oahebky  
       2020-04-10 08:49:37 +08:00
    直觉
    orzorzorzorz
        46
    orzorzorzorz  
       2020-04-10 08:55:41 +08:00 via Android
    无他,ts 给我安全感,毕竟我老是把变量名拼错又得花好久调试。你嫌难看可以用 any,不难看的写写类型也无妨。
    zhw2590582
        47
    zhw2590582  
       2020-04-10 08:55:41 +08:00
    我觉得 TS 自己写的话就很好,但是看别人写的 TS 的话就很纠结
    islxyqwe
        48
    islxyqwe  
       2020-04-10 09:02:27 +08:00   ❤️ 1
    TS 的类型是倾向于函数式的,还要用 class 等 OO 的来编写 ts 才会变丑吧。大部分类型都是自动推导的
    同事之前用 class 写的 react 组件我也根本看不下去,用 hook 写好多了
    drydiy
        49
    drydiy  
       2020-04-10 09:05:39 +08:00
    我跟你相反。在用 TS 实践了两个项目后,非常喜欢 TS 。
    sheaven
        50
    sheaven  
       2020-04-10 09:06:14 +08:00 via Android
    @cmdOptionKana go 可以不事先定义类型
    keelii
        51
    keelii  
       2020-04-10 09:14:22 +08:00
    ts 丑?那 java 呢?
    nfyig
        52
    nfyig  
       2020-04-10 09:14:45 +08:00
    ts 是增加可读性的, 当然是看你怎么去写了, 你如果没有用到 ts 的面向对象的特性, 写出来的代码当然丑了....
    ymcz852
        53
    ymcz852  
       2020-04-10 09:15:25 +08:00   ❤️ 3
    怎么很多人把用 js 就认为写 shit,太片面了,难道不是看写代码的人嘛,ts 改善的也只是浅层而已,shit 还是 shit
    中小型项目还是直接用 js 了,写起来爽很多,这就够了,不想丢弃动态语言的快捷性
    只希望不要刻意上 ts,ts 有它适用的方面,但也有不适用的方面
    raymanr
        54
    raymanr  
       2020-04-10 09:16:12 +08:00
    我也不是很喜欢 TS, 从 C# 转 python 没有推断不习惯了很久, 现在终于习惯了, 你又让我回去写网页版的 C# ?
    cmdOptionKana
        55
    cmdOptionKana  
       2020-04-10 09:25:23 +08:00   ❤️ 1
    @oahebky 时代变了,IDE 的影响很大,在现代 IDE 的支持之下,动态类型语言还有什么优势?
    fancy2020
        56
    fancy2020  
    OP
       2020-04-10 09:28:46 +08:00 via iPhone
    @April5 按你这种说法,只要有人协作的项目都不能用 js 了?那 js 就只能自己玩玩写写 demo 了
    chouchoui
        57
    chouchoui  
       2020-04-10 09:28:51 +08:00   ❤️ 5
    希望接下来的前端发展能快速淘汰不接受 ts 的开发人员
    miniwade514
        58
    miniwade514  
       2020-04-10 09:29:17 +08:00 via iPhone
    写类型其实就是在设计 API,好处是很多的
    lneoi
        59
    lneoi  
       2020-04-10 09:30:21 +08:00
    丑,还啰嗦...还兼容 js 本身一些历史遗留..
    当年全新语言没替代 js 成功、编译型的也没落了,TS 在这一众跑到了最后,算是当前场景下最好的方案了
    creanme
        60
    creanme  
       2020-04-10 09:34:21 +08:00   ❤️ 1
    主要它兼容 js,弄得类型非常复杂,有点烦,我宁愿它不兼容 js 。
    vagary
        61
    vagary  
       2020-04-10 09:35:41 +08:00
    有句话咋说来着,不管白鼠还是黑鼠,能抓着猫就是好年。
    simo
        62
    simo  
       2020-04-10 09:35:59 +08:00
    多了解几门语言,感受可能会不一样。
    仅限于 js 的话,经历过 js 标准的演变,应该会庆幸从 es6 开始学 js 是多么幸运。
    yhxx
        63
    yhxx  
       2020-04-10 09:48:30 +08:00   ❤️ 3
    不喜欢+1
    感觉把 js 搞成这样还不如去写 Java 或者 C#
    但是现在 ts 是政治正确
    paoqi2048
        64
    paoqi2048  
       2020-04-10 09:53:10 +08:00
    你好像有点急
    Hanggi
        65
    Hanggi  
       2020-04-10 09:56:43 +08:00
    不是开玩笑,你得改变下心态了,TS 真的很香。
    geshansuiyue
        66
    geshansuiyue  
       2020-04-10 09:57:33 +08:00
    我倒是挺喜欢的 代码提示也比写 js 好用很多。
    oahebky
        67
    oahebky  
       2020-04-10 09:57:44 +08:00   ❤️ 5
    @cmdOptionKana #55 原文:“@oahebky 时代变了,IDE 的影响很大,在现代 IDE 的支持之下,动态类型语言还有什么优势?”
    ======
    回复:因为我不写 java,所以你说的 IDE 影响很大我不清楚意思。

    但是编程未来是越往类型的本质靠拢的。也就是所谓的走起来像鸭子、叫起来像鸭子,那么它就是只鸭子。

    - 不论是内置的不同类型还是自己新建类型,只要实现了迭代,就可以被迭代的关键字语法或函数迭代地调用。
    - 只要实现了字典操作 _dict['key'],那么不论是内置类型还是自己新建类型,都可以这么用。

    这就是动态类型的特点之一。

    所以说,我期待的未来是学习语言不再是 int 、string 、byte ( char )、point 类型 (<-- 内存视角)。

    而是这个语言支持哪些行为,如:iterator,slice,hash 。然后该语言提供了哪些内置语法可以创建变量支持某种行为;而支持这些行为往往等同于实现了数据结构。
    即学习和编程的时候是从数据结构的视角,学习 iterator,slice,hash 等行为来操作数据结构。
    当自己创建类型的时候,往往是对数据结构做一种修改,拓展,定制。

    而不是像静态语言一样对内存做一种组合,然后再编写一堆方法来(支持)操作这个组合内的某一个数据。
    fancy2020
        68
    fancy2020  
    OP
       2020-04-10 10:01:45 +08:00
    @oahebky 说的很好
    lk920724
        69
    lk920724  
       2020-04-10 10:05:47 +08:00
    建议看下 Objective-c 你不会疯掉吧( doge.png )
    cmdOptionKana
        70
    cmdOptionKana  
       2020-04-10 10:06:03 +08:00
    @creanme 当年不兼容 js 的想取代 js 的语言有很多,比如第一代 Dart,但根本没人用。ts 兼容 js 是它最终胜出的最大原因。

    最近我用 Dart 的编译至 js 功能写了一个页面,非常好用,而且用起来完全符合 js 的习惯,同时获得了类型安全的好处。可以说 Dart 就是你说的 “宁愿它不兼容 js” 的样子,它很优雅,但你不会去用它来写网页,因为它不能方便地使用 npm 里的库。
    mitu9527
        71
    mitu9527  
       2020-04-10 10:07:37 +08:00
    语法只有烂不烂,没有丑不丑一说,一万种语言就有一万种不同的语法。与其纠结语法丑不丑,不如想想为什么 js 会需要 ts 。js 主要是用来开发上层应用的前端部分的,要靠面向对象去支撑越来越复杂的表现层逻辑,所以 js 需要的是 ts 的面向对象。其实 es4 的时候就转面向对象和静态类型了,但当时开发者们对面向对象不感兴趣,太超前反而失败了,这才让 ts 捡了一个大便宜。前端面向对象化是大势所趋,不知道 js 会不会再次推出自己的面向对象,到时候前端又是一场大混战,估计又是微软引发的。以前是 jsscript,现在是 ts,微软在 web 这块非要引领,从来就不想和其他公司携手前进呐。
    fancy2020
        72
    fancy2020  
    OP
       2020-04-10 10:09:03 +08:00
    @lk920724 其他语言再烂也不关我事,因为我用不到。但我写 JS,现在很多第三方库用 TS 重写,导致我间接的不得不用 TS 了,这就很不爽
    jsjgjbzhang
        73
    jsjgjbzhang  
       2020-04-10 10:09:17 +08:00
    先接触 ts 后接触 js 的我是不是异类
    cheeto
        74
    cheeto  
       2020-04-10 10:16:09 +08:00
    #营销炒作 ts,拒绝倒贴我家 js#
    Curtion
        75
    Curtion  
       2020-04-10 10:19:39 +08:00
    我挺喜欢的,比较不喜欢 python 这种,很丑
    BOYPT
        76
    BOYPT  
       2020-04-10 10:21:55 +08:00
    审美观差别巨大(
    cmdOptionKana
        77
    cmdOptionKana  
       2020-04-10 10:21:58 +08:00   ❤️ 10
    @oahebky 鸭子类型最大的问题在于,这只动物不走、不叫(即不动、程序不运行)的时候,你不知道它是什么动物。

    也就是说,静态分析难度大。

    就算让它走了、叫了(即,在运行时),前面运行得好好的,看起来像极了鸭子,后面偶尔有一段代码要求它拍翅膀,这才发现它虽然走起来像鸭子、叫起来像鸭子,却没有翅膀!程序抛出异常。

    当一个程序越来越大的时候,一个动物(类、对象)的特性就越多、越复杂,偶尔发现它不是想要的动物的情况就会很多,多到项目失控。

    静态语言的好处是,静态分析轻松,只要声明它是鸭子即可,它不管去到多么复杂的系统里都能一眼看出来就是鸭子,不需要它把全部动作都做一遍(程序不需要运行,直接静态分析),一边写程序一边有精确的提示,重构的时候极方便,不容易出错。
    shpkng
        78
    shpkng  
       2020-04-10 10:28:06 +08:00
    @tinycold 歪楼的给你点个没有帮助
    Torpedo
        79
    Torpedo  
       2020-04-10 10:31:27 +08:00
    觉得代码丑,那不应该好好写类型,整理下代码么?
    augustheart
        80
    augustheart  
       2020-04-10 10:35:54 +08:00
    ts 是的出现,是像 js 这种从内到外都是小玩具却要强撑着盖大楼的语言的必由之路……
    所有的变化都是为了适应大项目多人合作。
    ironMan1995
        81
    ironMan1995  
       2020-04-10 10:36:32 +08:00
    前些年的全网言论还是 JS 作为弱类型语言是它优点,现在又变了???
    qiaobeier
        82
    qiaobeier  
       2020-04-10 10:38:40 +08:00
    超级丑的 ts 屎山和超级乱的 js 屎山的区别。都是屎山没差啦。
    Torpedo
        83
    Torpedo  
       2020-04-10 10:41:04 +08:00
    PS:楼主贴的文章,在我见过反对使用 ts 的文章里,水平最低的一篇。。。
    fancy2020
        84
    fancy2020  
    OP
       2020-04-10 10:42:28 +08:00
    @Torpedo 哈哈,那你可以多贴几篇,给反 TS 阵营鼓鼓劲~
    ironMan1995
        85
    ironMan1995  
       2020-04-10 10:42:55 +08:00
    如果 TS 能够解决你的问题就用,很多人都受益于 TS ;如果你觉得 TS 不能带来好处,那不用也行。不要因为别人都在用你就用,不要因为这个“比较热”你就跟风去用。前端鄙视链,现在已经有用 TS 鄙视用 JS 的趋势了
    augustheart
        86
    augustheart  
       2020-04-10 10:44:19 +08:00
    @ironMan1995 这点依然是优点吧,但是你的优点不见得是别人的优点啊。
    比如我写 c++的时候特别喜欢用模板,只要有可能重用算法的地方我都会写个模板,结果上次被合作的哥们给吐槽了……
    语言对个人来说想怎么用就怎么用,但是如果涉及到多人合作,就得面临各种妥协了。比如谷歌的 c++规范,都妥协成什么鬼样子了……
    fancy2020
        87
    fancy2020  
    OP
       2020-04-10 10:45:12 +08:00
    @ironMan1995 如果可以做选择当然我不 Care 会出现什么 TS 还是 BS,关键 TS 的侵入性太强了,不像 Flow 等工具把类型的定义单独放,看很多第三方库代码的时候不得不读 TS 。所以会有种被强迫使用 TS 的感觉
    lihongming
        88
    lihongming  
       2020-04-10 10:50:47 +08:00 via iPhone
    Java 过来的我表示也不喜欢 TS,不伦不类的。

    既然是另一门语言了,既然需要编译才能运行了,何不直接使用 Java ?把 Java 编译成 JavaScript 不香吗?
    oahebky
        89
    oahebky  
       2020-04-10 10:59:01 +08:00
    @cmdOptionKana #77 原文:“@oahebky 鸭子类型最大的问题在于,这只动物不走、不叫(即不动、程序不运行)的时候,你不知道它是什么动物。也就是说,静态分析难度大。就算让它走了、叫了(即,在运行时),前面运行得好好的,看起来像极了鸭子,后面偶尔有一段代码要求它拍翅膀,这才发现它虽然走起来像鸭子、叫起来像鸭子,却没有翅膀!程序抛出异常。当一个程序越来越大的时候,一个动物(类、对象)的特性就越多、越复杂,偶尔发现它不是想要的动物的情况就会很多,多到项目失控。静态语言的好处是,静态分析轻松,只要声明它是鸭子即可,它不管去到多么复杂的系统里都能一眼看出来就是鸭子,不需要它把全部动作都做一遍(程序不需要运行,直接静态分析),一边写程序一边有精确的提示,重构的时候极方便,不容易出错。”
    ======
    回复:
    我没有说静态语言完全没有好处。
    我说的是“我个人坚信语言往静态发展是倒退。往动态发展是进步。”
    我的意思也就是说,对于你说的动态语言问题,思路是通过进化编译器逐渐解决,也就是进步。
    但是因为动态语言有这个问题,就退回到没有这个问题的静态语言上,那么静态语言要怎么进步呢?不就是泛类型化 -- 往动态性演变。“最终还是变成一个拥有动态语言(语法)的静态编译器”。

    静态语言不是因为你一眼看出来是鸭子,是鸽子所以不容易出错(编译器报错)。
    而是因为你把时间花在查看源码实现,以及实现给鸭子安上火箭推进器上。

    而不是像动态语言一样可以“凭感觉”写,把鸭子的声线和鸭掌按倒火箭推进器上,然后把这个火箭推进器返回(鸭子变成了火箭推进器)。
    如果你写动态语言也一样对一个变量追到它的创建,修改,销毁一生的流程,那么同样可以写出不容易出错的代码。
    g00001
        90
    g00001  
       2020-04-10 11:01:09 +08:00   ❤️ 1
    TypeScript 是不错,但是 TypeScript 导致一种错觉 - 静态类型就一定好,静态类型也是有许多缺点的 - 例如看似强大其实也会笨拙麻烦的 C++ ,只是在太过散漫自由的 JavaScript 世界里,TypeScript 有压倒性的优势。例如 JavaScript 的智能提示 - 没有一个开发环境能做得令人满意,但是 TypeScript 就可以完美的解决这些问题。

    例如同样是动态语言的 aardio,有一个庞大且规范统一的标准库,语法针对智能提示做了专门的优化,仅仅只有 6.5MB 的开发环境,但是智能提示可以做到如此利索:



    如果 JavaScript 也有一个如此庞大且规范统一的标准库,语法重新设计针对开发环境提前做好优化,能带来利索的智能提示,那么 TypeScript 可能就不再有压倒性的优势。
    jarenduan
        91
    jarenduan  
       2020-04-10 11:01:28 +08:00
    @oahebky

    - 不论是内置的不同类型还是自己新建类型,只要实现了迭代,就可以被迭代的关键字语法或函数迭代地调用。
    - 只要实现了字典操作 _dict['key'],那么不论是内置类型还是自己新建类型,都可以这么用。

    C# foreach 实现方式类似, 索引属性也类似. C#是静态类型语言. 这些特性和是否动态类型没有关系.

    动态类型不等于弱类型, 通常指在运行时进行类型检查, 它也是基于类型的. 所以不存在动态类型语言是基于"行为"的这种说法.

    运行时检查的最大问题是没有编译器帮你事前发现潜在 bug. IDE 也没办法给你智能提示. 你拿到新类库以后, 也不知道调用什么, 返回什么, 属性方法怎么拼写, 必须强度依赖文档. 重构实现也非常难或者效率低. 这更多程度是软件工程范畴的问题.

    搞过 C++的这些应该深有体会啊.
    optional
        92
    optional  
       2020-04-10 11:05:16 +08:00 via iPhone
    引用文章质量太差,不是英文就是好文章的
    fancy2020
        93
    fancy2020  
    OP
       2020-04-10 11:06:14 +08:00
    个人觉得通过编译器能检查出来的 bug 通常都不是啥大问题,写 C++的时候遇到最多的应该是空指针(也就是运行时错误)。
    其实原生 JS 加上合适的 lint 已经能发现大部分低级错误了。
    coldsnap
        94
    coldsnap  
       2020-04-10 11:06:32 +08:00
    楼主你后续附上的文章,所有标题的观点都站不住脚。我怀疑作者本人也不这么认为,只是他觉得这样写可能会火。
    fancy2020
        95
    fancy2020  
    OP
       2020-04-10 11:08:34 +08:00
    比较认同文章里的这几点:
    Typescript is not standard
    People only use Typescript because they are used to OO languages
    Flow is better

    其他观点确实站不住脚。。
    @coldsnap
    iyeatse
        96
    iyeatse  
       2020-04-10 11:09:31 +08:00
    js + jsdoc + vscode 一样可以实现类似 ts 的类型系统,小工程用起来还是很爽的
    augustheart
        97
    augustheart  
       2020-04-10 11:11:54 +08:00   ❤️ 1
    @oahebky 你说的这个只是接口的作用吧,动态语言的内部,追究到字节码虚拟机 jit 什么上面,其实还是静态语言那一套东西。
    基本上到今天,动态语言和静态语言的区别就是同一个变量 3 秒钟之前是鸭子,3 秒钟之后它又可以变成狗,而在静态语言里面鸭子一辈子都是鸭子。这个才是它们唯一的区别(纯个人体会)
    dogfeet
        98
    dogfeet  
       2020-04-10 11:15:29 +08:00
    以题主链接中的片段为例:
    dogfeet
        99
    dogfeet  
       2020-04-10 11:23:27 +08:00
    以题主链接中的片段为例:

    ```typescript
    function factorial (n: number): number {
    if (n == 0) return 1;

    return n * factorial (n-1);
    }
    ```

    在 js 中,不看完这个函数,你知道调用的时候可以传什么参数进去吗? string 支持不支持?返回值是什么类型?
    js 中这个函数最后类型还是会在注释中描述出来。

    复杂点的例子就是支持 uniontype 的时候,js 就更吃力,注释里面往往大段还说不清楚,必须跟到代码逻辑中才能确定。

    更吃力的是,js 代码你在看的时候想跟进去看,你的编辑器跳转的根本没法保证正确,有时候跳对了地方,有时候又不是。最后你也不敢完全相信编辑器的跳转。只能自己不停的在脑子中过一些没必要的逻辑。

    ts 正是因为比较严格的类型系统,编辑器能准确的跳转的函数定义的地方,真的跟起复杂项目的逻辑得心应手。

    看代码,不是看字符串多少,是理解逻辑脉络。ts 这方面绝对是甩 js 几条街。

    其他什么重构就不说了。
    sankooc
        100
    sankooc  
       2020-04-10 11:31:30 +08:00   ❤️ 1
    你不是一个人
    1  2  
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5504 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 07:17 · PVG 15:17 · LAX 23:17 · JFK 02:17
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.