为什么你们要选择 TypeScript?

2021-05-06 14:45:03 +08:00
 BoringTu
我只是不明白为啥这么多人会选择 ts ?理由是啥啊? ts 出来的那年我就关注了,但所有的理由在我看来都是莫名其妙的观点,但这些年怎么还用的人越来越多了?
咱就说脑回路很神奇的把本身弱类型为优势的 JavaScript,套了一层强类型的壳的这步操作我就看不懂了,这是图啥呢?这样代码写着不难受么?那你直接用 Java 写然后编译成 JavaScript 不好么?
网上有很多人说,用 ts 可以减少因类型导致的错误。大哥,你是个程序员,你连自己写的代码是怎么跑的都不知道的话,转行好吗?我十一年的程序员了,js 写了 11 年,js 的其他高级语言我也都研究过,包括 ts,但现在只用 es6 和 coffee2,我怎么就一次都没碰到过我连变量背后的值类型导致的 bug 呢?
24468 次点击
所在节点    JavaScript
303 条回复
kop1989
2021-05-06 15:09:18 +08:00
@BoringTu #16 这个“火”,我个人理解很大程度上是偶然的。换句话说,掌握技术选型的这帮互联网头部人士,他们内部固步自封、内循环的结果。(我认为这种“结果”还有很多,比如 leetCode 刷题,比如青睐 github 开源等等)

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

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

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

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

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

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

说起来就我听说过的新生代编程语言,好像就 elixir 是动态的
其他包括什么 nim crystal V 都有静态类型系统,更别说那些纯函数的语言了
BoringTu
2021-05-06 15:18:41 +08:00
@kop1989 我也是这么想的,都是所谓大厂带出来的风气
x940727
2021-05-06 15:18:42 +08:00
@Leviathann 小儿科?哪里小儿科了?
ianva
2021-05-06 15:19:43 +08:00
类型的推导就是对代码的证明,如果不理解这一点,本质上是没有理解什么是编程
Rwing
2021-05-06 15:21:06 +08:00
@BoringTu 是的。又回到最开始说的,因为强类型更适合大型多人协作的项目
plk403
2021-05-06 15:21:23 +08:00
我当然知道自己写的啥代码啦,但是别人不知道我写的啥,我也不知道被人写的啥
BoringTu
2021-05-06 15:22:51 +08:00
@learningman 但是并不需要啊。。
我虽然不是有笔记本文档写代码吧,不过也是常年 vim,顶多需要一个自动补全,而且也只是补全当前文档中存在的单词以防打错,而不是像 java 的各种 IDE 那样要点出这个对象后面所有的属性
yEhwG10ZJa83067x
2021-05-06 15:23:58 +08:00
@BoringTu
#14 "你肯定是用 windows 的吧,你不觉得 windows 用起来浑身难受么"
关键在人,而不是工具,玩 windows 照样可以玩的顺风顺水
k9982874
2021-05-06 15:27:29 +08:00
楼主写了 11 年 JS,但是不是人人都写了 11 年 JS 。尤其是资本家喜欢节约成本顾应届生或初级开发的情况下,大片的 copy/paste,产品再加把火“这个功能改改就上”,导致项目质量堪忧。
这时候 TS 就可以补上短版,让 leader 少死点脑细胞,在不能骂人的情况下,一句照规范来省好多口水。
learningman
2021-05-06 15:28:24 +08:00
@BoringTu #36 ???
你写代码不用三方库和框架的吗?
用一个新框架还得背 API 了
TomatoYuyuko
2021-05-06 15:29:05 +08:00
喜欢用就用嘛,不喜欢就不用,写代码的是人不是工具
我小团队人员固定就不愿意用 ts,大项目见仁见智吧

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/775169

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX