为什么你们要选择 TypeScript?

2021-05-06 14:45:03 +08:00
 BoringTu
我只是不明白为啥这么多人会选择 ts ?理由是啥啊? ts 出来的那年我就关注了,但所有的理由在我看来都是莫名其妙的观点,但这些年怎么还用的人越来越多了?
咱就说脑回路很神奇的把本身弱类型为优势的 JavaScript,套了一层强类型的壳的这步操作我就看不懂了,这是图啥呢?这样代码写着不难受么?那你直接用 Java 写然后编译成 JavaScript 不好么?
网上有很多人说,用 ts 可以减少因类型导致的错误。大哥,你是个程序员,你连自己写的代码是怎么跑的都不知道的话,转行好吗?我十一年的程序员了,js 写了 11 年,js 的其他高级语言我也都研究过,包括 ts,但现在只用 es6 和 coffee2,我怎么就一次都没碰到过我连变量背后的值类型导致的 bug 呢?
24469 次点击
所在节点    JavaScript
303 条回复
EPr2hh6LADQWqRVH
2021-05-06 15:29:25 +08:00
您这十一年算是白搭了
BoringTu
2021-05-06 15:33:14 +08:00
@hronro [即使你可以记住你代码的每一个细节,但一个项目通常不只是你一个人在写,你能清楚的记住每一个别人写的函数的签名吗?] 这句话我也不敢苟同。不需要记住项目里的各种细节啊,我脑容量还没这么大,而且也没必要啊。项目当然不是一个人在写,而且基本上都是所有人的代码可能都会改到,也没碰到什么问题啊?以及你所谓的“函数签名”(咋聊着 js 还弄出这么个词。。)函数名以及变量名要语义化,这是项目管理以及员工培训的内容,跟语言有个锤子关系?退一步说,定期或者不定期代码 review,或者查看 commit 改动也能看到问题。因为这些理由就必须要选 ts ?这是啥逻辑。。而且如果员工就是这种人的话,就算让他用 ts 了,代码质量就高了?不见得吧?
chouchoui
2021-05-06 15:33:23 +08:00
亏你们能和一个不进行代码格式化的人扯了半天😂
haw86104
2021-05-06 15:33:42 +08:00
其他不谈,我还真遇到不少第三方库使用起来,对变量类型定义差别的 bug
huijiewei
2021-05-06 15:34:41 +08:00
放出你的 GITHUB 。哪怕代码片段也行

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

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

> 这样代码写着不难受么?那你直接用 Java 写然后编译成 JavaScript 不好么?(不难受,不好,Java 也不是强类型)
charlie21
2021-05-06 15:35:19 +08:00
Angular 是 ts only 的前端框架,若不用 Angular 可以不写 ts
youxiachai
2021-05-06 15:35:52 +08:00
@BoringTu 用个 windwos 都能扯? 我三平台的机子都有啊...大哥其实我写 flutter 的....
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
2021-05-06 15:37:50 +08:00
一个人写东西,和一群人写东西是两码事。我恨不得所有人的代码风格都和我一样,因为就像你说的:“我当然知道自己写的啥代码啦”,但问题就在于别人会这么做吗,你如何保证多数人的水平在一个相近的 Level 上?在公司里做项目,我觉得成本最高的往往是沟通环节。
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
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
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
2021-05-06 15:43:06 +08:00
@BoringTu 另外 当项目大到一定程度 或者是由不同团队开发的组件集成
“代码 review,或者查看 commit 改动” 根本不可能 要么脑子不够 要么可能根本看不到

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

用强类型的 TS 会让菜鸟更难写出代码 但至少写出的代码会有一定程度更好的保障
BoringTu
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
2021-05-06 15:45:50 +08:00
@littlemcdull 我看到你说的这句话也笑了,yy 的爽么?
多看别人说话,自己少插嘴,给你个建议
BoringTu
2021-05-06 15:48:19 +08:00
@ianva 哦豁,你这句话只能暴露出你对弱类型一无所知。。(怎么莫名其妙就开喷了呢兄 dei ?
g00001
2021-05-06 15:50:08 +08:00
“你肯定是用 windows 的吧,你不觉得 windows 用起来浑身难受么。。” 看到这句惊到了,你自己用一下 Windows 就浑身难受可以理解,为啥其他用 Windows 就得跟你一起浑身难受呢?! Windows 是靠用一下就浑身难受占领了桌面系统最大的市场?!
BoringTu
2021-05-06 15:50:14 +08:00
@learningman ???
你用第三方库不看文档直接打点就用??
BoringTu
2021-05-06 15:51:48 +08:00
@avastms 您说您这一句疑似喷人的话,后面就没下文了,是不是找骂的。。
您到底说一些论据来支撑前面这句论点啊

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

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

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

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

© 2021 V2EX