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 · 24515 次点击
    这是一个创建于 1305 天前的主题,其中的信息可能已经有所发展或是发生改变。
    我只是不明白为啥这么多人会选择 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  
    Jirajine
        101
    Jirajine  
       2021-05-06 16:50:21 +08:00 via Android
    @x940727 别的不多说,Java 连个 sum type 都没有,就知道继承,OO 毒瘤。
    zjsxwc
        102
    zjsxwc  
       2021-05-06 16:52:55 +08:00
    强类型照样写出屎山。

    我喜欢 typescript 的原因是 angular,是全套的生态,全套的服务!
    zhangshine
        103
    zhangshine  
       2021-05-06 16:54:28 +08:00
    用了都说好,尤其是重构的时候🤣
    blindie
        104
    blindie  
       2021-05-06 16:55:16 +08:00
    @BoringTu Typescript 能解放你的心智负担。
    举个例子在全新的项目里需要你重构一个函数的实现,typescript 下你可以直接改这个函数体,因为传参和返回的类型都已经约束好了。而 js 下你要么拍脑子想一想,要么得用 BFS 来 traverse 整个 code base 搞清楚每个调用方的使用方式。一个 O(1),一个 O(code base),能一样吗。
    以及你 #59 说“你用第三方库不看文档直接打点就用??”,npm install @types/xxx 对应版本或者自带 d.ts 的库就是不需要看文档直接打点就用。

    而以上只是用 Typescript 带来生产力起飞的能力中的两点而已。
    chengdonghui
        105
    chengdonghui  
       2021-05-06 16:57:19 +08:00
    typescript 的优点是它的类型推导系统,但是以下情况下,优点并不适用:
    1 项目规模较小时,用不用强类型,关系不大
    2 开发团队人员比较少时,大家直接交流了,也不需要强类型来约束
    Leviathann
        106
    Leviathann  
       2021-05-06 16:57:22 +08:00
    @x940727 类型和对象是两个东西,这些复杂的类型多出自函数式编程语言。
    比如你用 java 想表达一个变量只能是两种类型中的一个如何表达?就算要强行表达也得写一堆样板代码
    yohole
        107
    yohole  
       2021-05-06 17:08:51 +08:00
    跑个题,到底在座各位有多少人目前工作上是真正意义上的 [大型] 和 [需要多人协作] 的前端项目?不会人均 BAT 吧?
    不会又是 讨论的时候造火箭,工作的时候其实在拧螺丝吧?
    zhaol
        108
    zhaol  
       2021-05-06 17:13:57 +08:00
    实在不行所有类型你都约束个 any,就跟写 js 一样.
    OxOzZ
        109
    OxOzZ  
       2021-05-06 17:15:10 +08:00   ❤️ 1
    你自己心里答案都这么明确了还发帖子问鸡毛呢
    kop1989
        110
    kop1989  
       2021-05-06 17:16:20 +08:00   ❤️ 1
    @jeffwcx #72 这里不是说正确与否,经营自己的 GitHub,包括 LeetCode 肯定是对自己能力有帮助的,这个毋庸置疑。但问题在于这个风气给程序员这个职业引入了非工作内容的压力和门槛。

    假设这么一个场景:你希望你的员工是一个刻苦( 996 )懂算法(能手撕 hard ),乐于学习( gitHub 经常更新、维护)的人。
    但你又不希望你招来的员工在上班时间划水。

    那么问题就来了,这员工的开源项目和算法经验从何而来呢?说白了,你即希望员工在上家公司划水刷题,又不希望员工在自己的公司划水刷题,招聘的时候还要求员工要有刷题经验,这不是典型的“又当又立”么?

    话说回来,还是那帮“互联网头部”固步自封的结果。我用的,别人也得用,我走的老路,别人也得走,否则就不带你玩。
    lewinlan
        111
    lewinlan  
       2021-05-06 17:16:23 +08:00 via Android   ❤️ 1
    不好意思,我还真不知道自己写的 python 是怎么跑起来的(手动滑稽
    三个月前写的代码我都不知道他是怎么跑起来的,更别说是别人写的了。
    另外您还没准确区分强类型和静态类型,这可能与您的年限不太匹配……
    momocraft
        112
    momocraft  
       2021-05-06 17:17:30 +08:00
    智力不够写 JS 只能靠 TS 的提示写代码糊口
    Imindzzz
        113
    Imindzzz  
       2021-05-06 17:19:00 +08:00
    @yohole 看你是怎么定义的呢,2 个人合作也是多人合作。

    话说回来了,哪怕自己一个人写代码,引入 ts 也没啥坏处嘛。但是不用 ts,在不可预见的未来可能就麻烦了。

    看道理说工具链有问题,欢迎说出来交流交流。
    hyrious
        114
    hyrious  
       2021-05-06 17:19:29 +08:00
    感觉现代编程语言加个类型检查是趋势
    随便说几句
    1. ts 不是强类型,甚至不是 js 的超集:例如 func<1,2>(3)
    2. ts 不强制要求你的类型能完美推导:随时可以用 as 和 any 逃课。
    3. 编程时的信息量越多,解决问题的效率越高
    jeffwcx
        115
    jeffwcx  
       2021-05-06 17:19:35 +08:00
    @kop1989 害,这也没办法,大部分面试官看到别人的面试经验好用也就用起来了
    JerryCha
        116
    JerryCha  
       2021-05-06 17:24:59 +08:00
    懂了,楼主是顶顶级 geek 。
    LiubaiQ
        117
    LiubaiQ  
       2021-05-06 17:27:11 +08:00
    敢问大哥项目规模多大,我司 react 项目,几十万行。。。如果没有 ts 。。。

    另外,我发现的一点,因为很多人图省事儿,写的东西都定义成 any,倒是跟 js 没区别了,处理个问题,本来代码一路点过去都没啥问题,到 any 就尴尬了,还要浪费时间去看这个`any`是啥东西,代码少没问题,代码多呢?

    维护成本大幅降低,开发成本小幅增加。
    Yuchen
        118
    Yuchen  
       2021-05-06 17:29:12 +08:00   ❤️ 2
    楼主记忆力太好了吧,反正我是记不住自己的代码是怎么跑起来的 www
    yohole
        119
    yohole  
       2021-05-06 17:32:23 +08:00
    @xd199153 我是搞后端的,有时候使用一些开源系统或者弄一些小页面的时候需要用到 ts 、vue 之类的,照葫芦画瓢修修改改其实还过得去,但是遇到过好几次揪心的事情全都是前端工程其本身以及 Node.js 工具链(庞大的依赖、网络、各种复杂的配置)导致的,这个对于有后端经验的新手来说都差点直接劝退了,其他的 0 基础的前端应该更难吧
    wangsyi13
        120
    wangsyi13  
       2021-05-06 17:33:09 +08:00
    工作了 11 年不一定有 11 年的经验
    zzlatan
        121
    zzlatan  
       2021-05-06 17:36:35 +08:00
    @jeffwcx 倒也是。。
    blindie
        122
    blindie  
       2021-05-06 17:42:24 +08:00
    @kop1989
    “但你又不希望你招来的员工在上班时间划水。”
    结果导向的老板:我希望我的员工能给公司带来价值,只要能够尽可能多地给公司挣钱,我才不管他 /她划不划水。
    一般的老板:叫爸爸。

    结果导向不在意这些,爹味浓厚那自然又当又立。那作为员工是不是在能有选择的时候选择给正常的老板打工,如果不能那是不是应该想方设法给自己换老板呢?
    所以唯一的上进的解还是努力提高自己,厚着脸皮在爹味浓厚的公司划水(学习)。
    littlemcdull
        123
    littlemcdull  
       2021-05-06 17:42:46 +08:00
    @BoringTu 拜托看下我的回答的点赞数,夏虫不可语冰
    BoringTu
        124
    BoringTu  
    OP
       2021-05-06 17:46:22 +08:00
    因为回复太快被禁言 30 分钟,每次重新发都会重置这个 30 分钟,吐了。。所以这个回复可能会长一点。。

    @nnnToTnnn 缩进语法我贼稀饭~ 所以只要我管理的项目里,技术栈就是 coffee + pug + sass (手动抠鼻

    唉,我也就是吐个槽,但其他都不说,但就是 ts 的市场这一点,我就怎么着都得入 ts 的坑,咋说也得吃饭啊。。

    @xd199153 哈哈哈,没有没有

    @wangxiaoaer 我大概讲讲我的系统使用历程吧
    刚用电脑的时候,那必然是 windows (哦行吧,是 DOS 。。),95 、97 都用过,然后是很长一段时间的 xp,后面试过 vista,但众所周知的难用,又回 xp.后来出了 7,卧槽真好用就一直都是 7 。试过 8,一样,又换回 7 。前面说的这个期间,我顶多是后期知道除了 win,还有很多其他系统,比如 OS X,比如各种发行版的 Linux,但因为对未知的恐惧,所以一直没换,也所以我当时手里的 macbook 买了就装了 win 7 。后来突然觉得自己是个傻 x,买了 mac 结果装 win ?所以我就强行装回 OS X,逼着自己去适应不用 win 。有一说一,前期真的难受,但那种难受只是因为不适应,因为快捷键和触摸板手势不了解,因为 windows 惯性思维而已。我忘了是多长时间之后,OS X 用的越来越顺手,这时候再用回 win,就变成 win 用着难受了,因为从人性化 从易用性角度来说,win 在 OS X 面前是没有任何发言权的。
    所以我没有其他意思哈,但针对你说的 [我每次用 mac 都想死,用 win 的时候感觉要起飞。] ,我给你的答复是,最起码截止目前来说,你还不会用 mac 。就像上面我回复另外一位的时候说的,因为孩子的原因,我很久没碰我家的 windows 那台电脑了,也所以,我也很久没碰过鼠标了~ 我们可以反过来看这件事,如果 mac 难用的话,我这段时间是咋过来的~

    @3dwelcome 你这个统计不能说明任何问题啊,只能说明字面上的使用占比而已啊
    如果只聊 win 和 OS X 的话,原因是这几方面:
    1. win 从出道开始跟 IBM 的捆绑销售,到后面的绝大部分市场电脑的捆绑销售(以及 win 盗版系统的猖獗
    2. Apple 官方是不支持 OS X 装到非官方电脑上的(而且黑苹果就没遇到完美的,就算是黑苹果,你也一样需要硬件支持,比如最起码你得弄一块苹果的触摸板吧?还是要花钱
    3. 之前我说过的思维惯性,因为 1 和 2,导致非 IT 行业的人绝大多数只听说过 windows 。既然没有选择,那就只有 windows
    所以你能拿 windows 的 82.96%说明什么问题呢?

    @g00001 你挺能杠啊兄 dei 。看看上面我说的,能回答你一部分问题,至于你说的 [怎么有时间上 V2 忙活一天不去多陪陪孩子] ,你上班能把孩子抱公司来?还是说你是自由职业?看你杠都杠不到点上,都替你着急。。

    @xd199153 诶嘿,你还去看我代码啦~
    是啊,文档复制啊,思路上肯定是:我现在需要获取这个蓝牙设备的所有特征值 -> 查文档对应的接口是什么 -> 查到了,复制,粘贴
    如果我连接口名都不知道,我怎么知道是 getB 开头呢?你这命题本身就不成立啊,这需要一个前提,我有一个模糊的印象,而且这个模糊的印象里包括开头是 getB 。

    @yohole 哈哈哈,这个问题问得好。。
    Imindzzz
        125
    Imindzzz  
       2021-05-06 17:49:17 +08:00
    @yohole 这个确实,我有时候去搞 java c++,也是有很多工具链上得问题卡主(比如 maven)。

    但这个其实只是熟练度的问题,去任何一个新的领域都会这样的。 因为不常用所以不知道怎么搞。

    可以强制自己先跑起来,再说如何优化。


    具体到前端这个来说
    1 、装 node/npm
    2 、装上 npm 源解决网络问题 ,推荐安装这个一劳永逸 https://www.npmjs.com/package/mirror-config-china
    3 、用脚手架初始化
    vue https://github.com/vuejs/vue-cli
    react https://github.com/facebook/create-react-app

    4 、npm i , npm run start
    BoringTu
        126
    BoringTu  
    OP
       2021-05-06 17:51:44 +08:00
    @wangsyi13 兄 dei,你怎么得出的结论?
    wang48ql
        127
    wang48ql  
       2021-05-06 17:52:01 +08:00
    有类型提示和没有类型提示的区别,按理说有写过 ts 就没这个疑问了啊
    BoringTu
        128
    BoringTu  
    OP
       2021-05-06 17:55:57 +08:00
    @littlemcdull 你好像有那个大病?
    你习惯性俯视踩踏别人被我给怼了,然后你跟我说你点赞数?以你这种逻辑思维,你是怎么当的程序员?工作不如意来网络上找存在感来了?
    yunyuyuan
        129
    yunyuyuan  
       2021-05-06 17:58:09 +08:00
    你这语气就像引战一样,ts 的名字不就说明了它的用处吗,就是给 js 加一个 type 。
    用不用的上,因项目而异,因人而异
    littlemcdull
        130
    littlemcdull  
       2021-05-06 17:58:20 +08:00
    @BoringTu 你开心就好
    lonelymarried
        131
    lonelymarried  
       2021-05-06 17:58:45 +08:00
    现在都流行出第二语言,类似 oc 出个 swift,java 出个 kotlin 。js 再出个 ts 。话说我真的学不动了,语言转换不过来了,最近经常写 oc 、js 、dart 、java,疯了。
    LancerComet
        132
    LancerComet  
       2021-05-06 18:00:20 +08:00   ❤️ 1
    我来说一个 TypeScript only 的特性,TS 带一个能力很弱的反射,我平时在项目里用这个特性实现两个东西,一个是接口字段映射 + 类型安全的 Serializer,一个是在 Model 上做注解的表单验证器,这两个东西让切图也可以像其他语言一样以 Model 为中心;另外还有一个是服务容器,要实现一个根据类型注入实例的服务容器,只能用 TS
    LancerComet
        133
    LancerComet  
       2021-05-06 18:01:17 +08:00
    @LancerComet 但对于这个东西,我认为楼主的疑问应该载入,明明是个切图项目,还搞这些花里胡哨的玩意,不应该动态弱类一把梭吗
    BoringTu
        134
    BoringTu  
    OP
       2021-05-06 18:02:22 +08:00
    @yunyuyuan 看起来像引战的原因是,这个话题本来争议性就大哇~

    但我问这个问题是真不能理解 ts 存在的价值(当然,形势所趋,我必然也得入 ts 的坑

    你要是看了前面我回复别人的话你就理解为啥我会问这个问题了,我 java 入行,就是因为看到 js 的弱类型的优势,所以甘愿大幅降薪转做前端从零做起,因为 js 好玩,工作是生活的一部分嘛,总要让工作有点乐趣。结果 ts 还把弱类型这个特点给堵上了。。
    BoringTu
        135
    BoringTu  
    OP
       2021-05-06 18:05:02 +08:00
    @LancerComet 哟西,我研究一下这几个东西~
    Justfakemoz
        136
    Justfakemoz  
       2021-05-06 18:05:36 +08:00   ❤️ 1
    活活浪费了 11 年
    yunyuyuan
        137
    yunyuyuan  
       2021-05-06 18:06:56 +08:00
    @BoringTu #134 我 python 入门的,和你一样看 js 弱类型才玩的,也不喜欢用 ts,但是 ts 也不赖啊,命名时设一下类型,IDE 会自动补全使用部分的
    BoringTu
        138
    BoringTu  
    OP
       2021-05-06 18:08:00 +08:00
    @Justfakemoz 你好像跟上面的某位一样有点那个大病?
    BoringTu
        139
    BoringTu  
    OP
       2021-05-06 18:09:46 +08:00   ❤️ 1
    @yunyuyuan 嗯。。我只是思想上挣扎一下。。
    然后上面看到一位大佬说了几点 ts 的优势,我去研究研究
    不过不管咋说,就算因为市场原因,就算 ts 没什么优点,我肯定也得入 ts 的坑,毕竟要养家糊口。。
    wemadecode123
        140
    wemadecode123  
       2021-05-06 18:12:56 +08:00
    代码如果是你一个人写,随便你怎么搞。考虑下下一个接手的人,考虑下大型团队合作开发。现代语言越来越重视 [类型] 这个概念,没有 [类型] 大型项目可持续迭代举步维艰。
    tmac33
        141
    tmac33  
       2021-05-06 18:13:44 +08:00
    同样想不通,这真是一种倒退,怪就怪同行衬托
    lbyo
        142
    lbyo  
       2021-05-06 18:14:14 +08:00
    @xd199153 #99 补充一点,配合 VS Code 使用的话,变量重命名也变得简单,选中变量 => 右键 => Rename Symbol 就可以了,省去了搜索、匹配、替换的功夫了
    jeffwcx
        143
    jeffwcx  
       2021-05-06 18:15:11 +08:00
    @BoringTu 我估计你 ts 用熟练后之后就会像熟悉 macOS 之后吐槽 windows 一样😂
    jeffwcx
        144
    jeffwcx  
       2021-05-06 18:17:23 +08:00
    @yohole 额呵呵,要是后端也能随随便便搞定前端,那我们专业前端就没饭吃了🤪
    jeffwcx
        145
    jeffwcx  
       2021-05-06 18:18:35 +08:00
    @xd199153 你说的 npm 网络问题,其实挂 vpn 更好
    gzf6
        146
    gzf6  
       2021-05-06 18:19:41 +08:00 via Android
    主要是因为不是所有人都和你水平一样高
    littlemcdull
        147
    littlemcdull  
       2021-05-06 18:21:36 +08:00   ❤️ 5
    @BoringTu 已 block,感谢 block 功能
    CodingNaux
        148
    CodingNaux  
       2021-05-06 18:24:41 +08:00
    1. ide 提示增强,提升效率
    2. 重构方便,类型写的好一改全改,js 的话引用分散在多个文件你得全局搜索吧
    3.方便阅读代码,别过一段时间,又得重头看代码,看 api 返回,理清数据结构
    namelosw
        149
    namelosw  
       2021-05-06 18:41:06 +08:00
    我说说我自己的感受:

    > 但现在只用 es6 和 coffee2

    用 TypeScript 不用 JavaScript 的原因:因为补全的原因写得比 JavaScript 快

    > 那你直接用 Java 写然后编译成 JavaScript 不好么?

    用 TypeScript 不用 Java 的原因:很多概念上很容易表达的东西 Java 都写不出来,只能糊设计模式

    而且 Java 根本没有靠谱的 transpiler,编译出来巨大,配置起来也麻烦,大部分语言情况都差不多,除了 Elm 之类专门 target JavaScript 环境的。

    总得来说就是富有表现力的静态类型语言,设计得别太复杂,其实都很好用。Java 没有表现力,JavaScript 不是静态类型。
    Biwood
        150
    Biwood  
       2021-05-06 18:43:14 +08:00   ❤️ 1
    大概是 2015 年就有大佬向我推荐 TypeScript,但是我一直没兴趣,直到后来开始用 VSCode 。以及,最重要的,当你接手了一个数据交互超级复杂的项目,而这个项目经手的人又多,命名不规范,你想追踪数据的流向时,发现一团乱麻的时候,如果用 TS 就能解决很多问题。
    另外,TypeScript 继承了 C#的血统,有兴趣的话可以了解一下什么是优秀的语言设计,C#的设计比较学院派,虽然看起来啰嗦,但是可以培养良好的编程习惯。你前面提到了 CoffeeScript,我没记错的话,它是借鉴了 Python 的风格,比本身就是动态语言的 JavaScript 更加简洁,跟 C#完全是往相反的方向走。简而言之,如果你追求代码质量希望减少出错率就选 TypeScript,如果你追求效率和简洁就选 CoffeeScript 。
    leonlu
        151
    leonlu  
       2021-05-06 19:02:48 +08:00   ❤️ 2
    给几个 ts 好用的例子,供楼主参考:
    1. 有了 ts,你基本可以大大降低对 API 文档依赖程度。以往像 lodash / ant-design 你要一直打开个文档去看 API 参数的。有了 ts 之后,看看 ts 定义,基本也差不多。但事实上这能带来非常大的开发效率提升!

    2. 更进一步,ts 还能减少前后端接口联调成本:如果后端接口用 thrift / protobuf / swagger / openapi 等等 idl 协议制定的,那么可直接从 idl 转成一个 ts 的 library 。你调后端接口的时候,少一个参数,直接在 vscode 里就给你提示了:不行。这个有时候甚至要比后端同学给提供一个联调环境还要靠谱。

    3. JS 项目非常常见的一个 case:一个 options,从最顶层一路向下传递很多层。传的过程中还有可能出现有的地方是加一些,有的减少一些。你看到这个 options 的时候很无力,你要向上翻无数层才能找到这个东西的结构。脑容量有限,装这些东西它就不划算。

    4. 团队需要规范,而 ts 能提供更多、更细致的约束。很多水友都提了,我就不展开了。

    5. 对于前端个人成长有收益。并不是所有的前端同学都是科班出身,一路从 C/C++/Java 学过到到 js 的。多学一点,没啥不好。

    总的来说,对于单人(前端)的开发效率有提升,对于团队的效率有成倍提升。所以,如果我是前端团队的 leader,我会选择上车。

    当然凡事皆有两面,ts 的接入也是有成本的。业务足够简单,没几行脚本的,确实也没这个必要。
    Jirajine
        152
    Jirajine  
       2021-05-06 19:15:13 +08:00
    觉得静态类型没有存在价值,要么就是你太菜,没写过多于一个文件项目的脚本小子;要么就是你太 nb 了,徒手撸高达,于是觉得别人用数控机床没意义。
    tanwill12138
        153
    tanwill12138  
       2021-05-06 19:35:57 +08:00 via iPhone
    吃瓜 dog
    liuw666
        154
    liuw666  
       2021-05-06 19:36:10 +08:00 via iPhone
    自动提示
    Justfakemoz
        155
    Justfakemoz  
       2021-05-06 20:18:05 +08:00
    @BoringTu
    "我只是不明白为啥这么多人会选择 ts ?理由是啥啊?"
    "不过不管咋说,就算因为市场原因,就算 ts 没什么优点,我肯定也得入 ts 的坑,毕竟要养家糊口。。"

    ???自言自语?
    "以你这种逻辑思维,你是怎么当的程序员?工作不如意来网络上找存在感来了?"
    slert
        156
    slert  
       2021-05-06 20:23:48 +08:00
    不排除很多人仅仅是因为 ts 流行而选择它
    ruoxie
        157
    ruoxie  
       2021-05-06 20:32:48 +08:00
    我也说不出理由,反正现在切换到非 ts 得项目,感受就是难受,效率低。你可以自己上手写一段时间
    heganj
        158
    heganj  
       2021-05-06 20:50:22 +08:00
    Quick and dirty 流派握手
    fy
        159
    fy  
       2021-05-06 20:56:09 +08:00
    因为好用。说实话出来那两年 TS 很菜,当年我也看过然后骂骂咧咧走了,后来今非昔比
    xarthur
        160
    xarthur  
       2021-05-06 21:07:52 +08:00 via iPhone
    @BoringTu 火说明很多人爱用,而且切实的解决了问题。
    不过看你发言你也不想知道解决了什么问题。
    所以「不爱用就不要用呗」(
    Kasumi20
        161
    Kasumi20  
       2021-05-06 21:16:31 +08:00
    11 年的就这样?就这?
    April5
        162
    April5  
       2021-05-06 21:28:35 +08:00
    我司后端之前有一个类似和 proto 类似的文件,之前如果使用 js 编码时需要在代码和 proto 文件间来回横跳,以确定消息中是否真的存在某个参数。
    之后切换到 ts,只需要根据这个 proto 文件生成对应的 ts 定义,我编码的时候 vscode 就能提醒我这个消息中存在哪些参数,然后这份 ts 定义甚至可以给到前端使用,充当 swagger 文档的作用,光这一点已经足够我切换 ts 了。
    across
        163
    across  
       2021-05-06 21:36:43 +08:00
    你要说出自己的应对场景和技能结构,按我的理解,这 11 年经验应该是从 html 到 jQuery 到 react 这种,所以只觉得 js 好,ts 多余。

    一般理解不了 ts 的都是这类,前端业务代码“更新”,指的是删掉旧无效的,加入新业务改版。这时候的 js 开发都是设计数据流的思路,相当于只做个视图界面。
    然而重量级的大型项目,更多是一层一层往上垒代码,内部模块划分、上下层调用,接口都要有明确的规则,不然光靠人脑效率太低了。 我这边用 ts 的代码,一个编辑器工具项目,近百万行,底层就是 ts 当 c++写的,定义数据结构,常用算法库等。 上层界面一直在改版更新,用的 react,ts 对 js 的优势就没那么大。
    doommm
        164
    doommm  
       2021-05-06 21:59:41 +08:00
    @LancerComet 你说的是 reflect-metadata 吗
    loveyou1
        165
    loveyou1  
       2021-05-06 22:18:27 +08:00
    用起来最大的好处就是少写 bug 和代码提示补全。
    jiangzm
        166
    jiangzm  
       2021-05-06 22:24:18 +08:00
    类型检查、智能提示、面向对象 TS 这些还不够吗。

    在多人大型项目中 ts 的优点尤为明显和重要。
    james122333
        167
    james122333  
       2021-05-06 22:33:08 +08:00
    为了这主题... 个人的话也比较喜欢弱型别 强型别的语言就算工具再怎么成熟动态性也是不能比的
    至于多人协作 这完全就是人习惯好不好的状况 强型别照样可以写的一坨难以维护的代码 转型问题、因物件特性带来的耦合都是很麻烦的 很容易造成历史问题 接手项目两种语言会有不同的问题点
    这到最后一切就是根源政治没错 我都觉得自己用的最舒畅 独孤九剑
    abersheeran
        168
    abersheeran  
       2021-05-06 22:41:16 +08:00
    还行……主要是编辑器的代码提示比较爽,还有就是用别人的 TS 代码相对容易那么一点。

    我本人如果只写个小页面,也只用 JS 的。看场景用吧,以前写 C 的时候我还偶尔写写汇编呢。
    nanxiaobei
        169
    nanxiaobei  
       2021-05-06 23:10:19 +08:00
    反正我不爱用,写起来太繁琐了,而且代码也很丑

    不过用的也很好理解,就跟公司的制度一样,多了确实繁琐,但是能保证不出大错,所以领导喜欢
    fuermosi777
        170
    fuermosi777  
       2021-05-07 01:03:45 +08:00
    @littlemcdull 已经说的很中肯了,lz 还嘲讽他。。。
    说真的如果 lz 如果在大公司待过,或者 contribute 过大型项目,大概率不会问出这个问题。
    dayeye2006199
        171
    dayeye2006199  
       2021-05-07 04:51:40 +08:00
    > 大哥,你是个程序员,你连自己写的代码是怎么跑的都不知道的话,转行好吗?

    在公司干,或者去开源社区,大部分代码其实都不是自己写的。。这个时候少个类型系统你就知道有多难受了
    christin
        172
    christin  
       2021-05-07 07:27:37 +08:00 via iPhone   ❤️ 1
    你觉得 windows 难用所有人都得觉得难用?
    你用不惯 ts 所有人都得跟着你一起反对 ts ?
    上来就说自己工作了 11 年干嘛啊 甩资历吗?
    lrh3321
        173
    lrh3321  
       2021-05-07 08:09:19 +08:00 via Android   ❤️ 1
    类型本身就是一种文档的,大家都不喜欢写文档。上了 ts,至少项目代码可维护性上升了
    CaffreySun
        174
    CaffreySun  
       2021-05-07 08:19:30 +08:00
    从团队和项目角度去想,提高效率,较低成本,为什么不用 TS ?
    joesonw
        175
    joesonw  
       2021-05-07 08:23:01 +08:00 via iPhone   ❤️ 4
    1 年经验 x11 吧?没在团队里工作过?自己知道怎么传参有什么用?别人知道吗?
    看回复历史,代码格式化都没用过,想来也没 lint,切图 11 年确实 js 够用
    whileFalse
        176
    whileFalse  
       2021-05-07 08:34:04 +08:00
    语言只是工具。

    我是 DevOps,写和命令行、文件频繁交互的小脚本时用 Shell,写逻辑复杂的工具时用 Python,用 CDK 这个跨语言 SDK 时用 TypeScript 因为代码提示做得好。

    流行的面向业务开发的这些语言都已经优化的十分友好了,有经验的开发者应该能够随时上手自由切换,使用最合适的工具完成当下的任务。那些面向底层的语言不在此列,比如 C++等。
    Fule
        177
    Fule  
       2021-05-07 08:57:13 +08:00
    俺家小学生学校有信息课,教简单的 Python,她人生的第一个无比疑惑的编程问题是为什么控制台里输入 “1” 和 “2” 赋值给 2 个变量, 然后 2 个变量相加得到的是 “12”

    ```
    a = input()
    b = input()
    print (a + b)
    ```
    cereschen
        178
    cereschen  
       2021-05-07 08:58:26 +08:00   ❤️ 1
    发现没有 所有反对 ts 的人都声称自己写 js 代码根本不会出现错误
    所以遇到这样的情况 我们只要说楼主 nb 满足一下他那脆弱的虚荣心就可以了
    Actrace
        179
    Actrace  
       2021-05-07 09:01:12 +08:00
    还是那句老话,每种编程语言,都有其适用的场景。

    在我看来 ,TS 的最终目标是大型多人运动的免文档化。说白了就是你在代码里提供足够详细的说明(相当于以前倡导的注释),然后再结合 IDE,可以在调试和多人开发时获得一定的便利,这样可以降低某些场景下的开发成本(交流沟通,后期维护等)。

    所以脱离场景去谈实用性其实没有意义。我个人也挺喜欢在 IDE 中编程时能获得尽可能多的自动化提示来降低心智负担,这些提示来自自动化的语法检查,函数补全等。不过如果是一些小项目,甚至是个人项目的话,似乎又没有必要为了这些特性额外增加前期开发的成本,毕竟需要到项目的后期才能看到成效。但是说不定没有后期了,写到后期结果发现要推倒重做或者又是新出了更好用的编程语言?

    ps.现在其实自动补全也相当成熟了,即使不依赖 TS 也能做得很好(大家可以试试 tabnine 这个 vscode 插件,号称人工智能),所以我选择也不用 TS 。
    ruyuejun
        180
    ruyuejun  
       2021-05-07 09:09:46 +08:00
    随便翻一个函数,不用看上下文,就知道参数类型,返回值类型,就仅仅这一点,还不够香吗?
    如果没有感触,我只想说:所谓做的大项目仅仅是多个业务的堆叠而已。
    sxfscool
        181
    sxfscool  
       2021-05-07 09:10:57 +08:00
    爱用啥就用啥,也不用陪着 lz 舌战群儒
    cwliang
        182
    cwliang  
       2021-05-07 09:16:29 +08:00
    因为懒,编码阶段类型提示什么都有,一气呵成,都不用看控制台
    zxCoder
        183
    zxCoder  
       2021-05-07 09:21:26 +08:00
    我也觉得 ts 很丑,架不住它就是火。。。可能因为前端人多吧,毕竟从 js 到 ts 出现了静态类型会觉得是质的飞跃。。。。
    rf99wSiT6IxH1Z23
        184
    rf99wSiT6IxH1Z23  
       2021-05-07 09:22:56 +08:00
    因为 Angular,入坑的 ts,类型检查,智能提示,感觉很安心。

    Node.js 写 web 服务,我喜欢 node.js + ts 的搭配
    BoringTu
        185
    BoringTu  
    OP
       2021-05-07 09:31:44 +08:00
    @christin 这么喜欢抬杠,你是杠精么?
    我用 windows 的这件事是来表达你用过 OS X,而且会用之后,你就会知道什么好用了,你啥理解能力啊?而且这件事是我跟那位兄 dei 聊的,你掺和个什么劲?
    你会用 coffee 或者其他 js 高级语言么?没用过的话你有什么资格跟我说这些呢?就会用一个 ts 就有底气了?而且我哪句话表达了让大家一起跟着我反对 ts 了?你如果眼睛正常的话,你应该看到我说了虽然个人认为 ts 的设计理念跟 js 是背道而驰的,但因为市场原因,不管怎样我都肯定要入 ts 的坑,所以你哪句话看到我要反对 ts 了?我还没自大到觉得我一个人可以影响整个市场的幻觉,谢谢
    我之所以说我的工作年限,是用来说明这个时间段里我看到的东西,你这么自卑么?看到别人说工作年限你就受不了?莫名其妙。
    tilv37
        186
    tilv37  
       2021-05-07 09:34:17 +08:00
    不是前端程序员,但也写过 ts 。
    说一下我对于脚本语言“强类型”的感受,应该能说明一些和我类似人的心态。
    前一阵我们接手了一个德国团队的大型 python 工程,是做 GIS 和数据计算的。德国团队只提供代码,不提供技术支持。
    我们自己理解代码,调试代码那叫一个费劲啊,都不知道返回的数据是啥类型的,只能运行起来打断点了才能知晓。

    当时我就和我们团队的人说,这尼玛要是个强类型语言,也许不需要调试代码了,看看、改改没准就能在中国跑了。

    ts 也许同理吧
    nanzm
        187
    nanzm  
       2021-05-07 09:35:14 +08:00
    一个能这么火的技术必然是解决了痛点问题,写了 js 11 年了都没去了解相关生态吗 ? 固步自封?
    大团队协作,类型注释有明显好处,这个还需要争论吗?
    ( ps: 一次都没碰到过我连变量背后的值类型导致的 bug 呢? 写得都是小项目吧,多用用 react 写写复杂业务组件,组件库,过个一年半载重构试试,或者你就有这个痛点了)
    Mirachael
        188
    Mirachael  
       2021-05-07 09:41:47 +08:00
    有啥好争论的,编译出来的不都是 js 吗?
    BoringTu
        189
    BoringTu  
    OP
       2021-05-07 09:47:41 +08:00
    @namelosw
    @Biwood
    @leonlu
    @james122333
    @whileFalse
    @Actrace
    感谢各位大佬为了给我解决问题的回答~ 不像上面有些傻子跟追星一样谁说 ts 不好就一顿乱喷,特别无语


    @joesonw
    “自己知道怎么传参有什么用?别人知道吗?” 兄 dei,说话的时候记得稍微带着点脑子,如果真像你说的这样,js 以及其他所有弱类型语言都没有活路了?用都不能用?
    你是怎么断定我没在团队里工作过,断定我没用过代码格式化,没用过 lint 的?嗯?我上面说无脑追 ts 的人就是你这样的,你这整段话我都不知道该怎么回你,你每个字都是个笑话。。


    @cereschen 你要说这件事的话,我只能说在各公司里我都是全公司 bug 率最低的,目前这家公司里我曾将近一年没有 bug,最后出 bug 是因为项目催的急,测试在我们开发阶段就介入了。你说气不气?脆弱的虚荣心?你先能做到这一点再跟我说这个好吗?
    你说好好聊天不好吗?非要说话这么冲然后被喷?
    BoringTu
        190
    BoringTu  
    OP
       2021-05-07 09:49:28 +08:00
    @tilv37 膜拜一下大佬~ 不过话说人家只提供代码不提供技术支持,这种东西能用么。。找外包还得有个项目维护期呢。。
    abcbuzhiming
        191
    abcbuzhiming  
       2021-05-07 09:54:18 +08:00   ❤️ 8
    楼主的这个疑问,在知乎有几个很经典的问题可以回答:
    “为什么 2010 年前后诞生的语言(如 Golang, Rust, Swift)都是强类型 + 静态”
    “在大型项目上,Python 是个烂语言吗”,
    “在大型项目上,JavaScript 是个烂语言吗”


    总结的说,第一代动态语言,仅仅是人类希望获得类型推导时进行的一次尝试,但是很明显,这个尝试失败,没有类型约束的系统天生不适合协作。它带来了额外的心智负担。


    楼主说自己写了 11 年,还是认为 js 的动态类型是优势,并觉得自己绝不会在过于灵活的动态系统面前出错,首先我承认,楼主应该是记忆力非常超群的那种人,其次呢,我基本可以肯定,楼主很少和人协作,计算协作估计也是和自己水平差不多的人协作,所以意识不到问题在哪里。


    但是我仍然要说,所谓现代软件工程存在的意义,就是把一群实力其实一般的人,拉到一起写代码的。换句话说,楼主这样的人虽然优秀,但是稀少,但是再优秀的人,它的工作时间也就那么多,仍然有大量的代码,必须由不那么优秀的人完成。
    当你必须考虑让不那么优秀的人一起协作的时候,你就会意识到过于灵活的类型系统是缺陷了。


    楼主写了 11 年,还是停留在“我很优秀,我身边的人也很优秀,所以我不需要约束,不需要严格的类型系统限制我的工作”这个思考层次,其实已经有点滞后了,真诚的建议楼主,跳出技术圈子的约束。
    理解电脑不过是工具,信息化的过程本质就是让更多的“傻瓜”也能参与和使用算力的过程。


    计算机的世界需要大神,但是计算机发展的历史进程是拉入更多的普通人,作为大神,应该顺应这个历史进程,而不是仗着自己的头脑先天有优势,挡在历史车论前面当螳螂
    tilv37
        192
    tilv37  
       2021-05-07 09:58:58 +08:00
    @BoringTu 外企在国内应该有相当一部分公司工作模式就是我们这种。中国公司和国外公司理论上是一家公司,但实际上是各自独立结算的。
    所以我们可以共享部分资源,但是如果要别人提供服务,是要额外付费的

    恰好我们接手的项目,只支付了基础咨询费用,也就是给我们讲讲这个产品在德国是干啥的,怎么考虑和设计的。
    但不提供细节指导
    Obrigado0815
        193
    Obrigado0815  
       2021-05-07 10:02:00 +08:00
    @zjsxwc 我第一次接触 ts,也是因为写 ng
    BoringTu
        194
    BoringTu  
    OP
       2021-05-07 10:02:13 +08:00
    我说说从昨天到今天这半天时间结合目前两层楼的各位大佬的回复,以及自己的研究,对 ts 的感受吧

    1. 各有所长。与其他 js 高级语言相比各有所长,比如我喜欢 coffee,是因为简洁,而且也能大幅避免很多常见低级错误,重点是保留了 js 的几乎所有优点,其中就包括弱类型这个特性。ts 是反其道行之的产物,但存在即合理,我也接受了 ts 的存在并且正在入坑中,但就像我之前说的,只是因为市场关系。如果说优点,ts 当然肯定是有优点的,我认真看了两层楼所有大佬描述的 ts 的优点,以及自己也网上看了官方文档和网上其他大佬对 ts 的推销文章,不过这些优点对我没什么太大帮助。
    1. 益于团队。这点我承认,尤其是在团队成员能力差距较大的前提下。这点来说,coffee 相对弱势,但差距并不是很大。各位不得不承认 ts 的突然崛起,跟国内所谓大厂的推销是分不开的。我这两层楼里一样有很多人是跟我一样的,对 ts 并不怎么感冒,但毕竟市场原因,所以入坑。
    3. 追星?为啥咱程序员的行业会有一些人对 ts 有盲目追星的情况出现。。我的天,真吓人。说一句 ts 不好,啥都骂,恨不得打车过来揍我,我怕了,真的~ ts 万岁!放过我。。
    Shook
        195
    Shook  
       2021-05-07 10:06:23 +08:00
    我自己也觉得 JS 弱类型舒服,但多人协作不可避免会遇到 lint 限制不到的代码风格差异、水平差异等问题。

    用你的话来说:如果你觉得 TypeScript 没必要,我给你的答复是,最起码截止目前来说,你还不会用 TypeScript 。
    breestealth
        196
    breestealth  
       2021-05-07 10:09:52 +08:00
    @rioshikelong121 忍不住为您点了个赞👍
    BoringTu
        197
    BoringTu  
    OP
       2021-05-07 10:12:14 +08:00
    @abcbuzhiming 感谢大佬中肯的回答,我了解了。。
    虽然接下来说的有点凑不要脸,但确实是事实,我面试的话,我觉得不行的就直接 pass 了,新手我是不招的,除非我觉得思维能力很好很有天赋的那种。从新手开始让我带出师的不多,只有三个。所以工作中很少碰到能力较差的。不过前一阵因为项目赶进度,项目中一个模块找的外包团队来做的,我脾气也确实不太好,前期一天能骂他们八遍(当然,不是有脏字的那种。。),我都快把代码贴他们脸上了,人家每次都是好的,然后该咋写还咋写,bug 堆 bug 那种,然后他们延期了一个月,一直不是在修 bug,就是在修 bug 的路上。。emmmm,跑题了~ 不过我其实是想说,就算是上了 ts,像这种没什么天赋的选手一样是写出一堆辣鸡没法用的,如果仅仅是维护就还好,如果需求有稍微大一点的变化,他们的代码是没法继续用的,只能推倒重新写。我真的不信上了 ts 就不会发生这种问题。但 ts 在团队合作中的优势我是承认的,但并没有宣扬的那么大而已
    BoringTu
        198
    BoringTu  
    OP
       2021-05-07 10:16:11 +08:00
    @Shook 是的,不过正在入坑中
    qiumaoyuan
        199
    qiumaoyuan  
       2021-05-07 10:27:58 +08:00
    @abcbuzhiming 哈哈哈
    shunia
        200
    shunia  
       2021-05-07 10:33:25 +08:00
    这居然也能上热一,这是真的水深火热。

    “因为我只用过 Java 、JavaScript 、Coffee,所以我不知道为什么这么多人选择 ts”
    你要么就用用试试,要么就自己去选择,有什么所谓?

    另外写了十一年还要问出这个问题,我觉得不太合理,你应该直接就没疑问,JavaScript 继续从一而终。

    另外纠正一个说法,没有所谓的“js 的其他高级语言”,我理解都是转译而已。
    1  2  3  4  
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2700 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 40ms · UTC 09:35 · PVG 17:35 · LAX 01:35 · JFK 04:35
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.