DHH 移除 TypeScript 后的反静态类型主义营销号刷屏有点让人绷不住

2023-10-15 06:40:12 +08:00
 netabare

尤其是过了这么久还能看到这些营销号,然后评论区大家都在集火喷 TypeScript 。

实在是不懂为啥静态类型会惹来这么多人厌恶,更不用提这个 PR 还有个更严重的问题 - 在多人协作的项目里直接 force push 了。

本来还想写点啥吐槽一下,然后感觉累觉不爱,只能说这位社区领袖直接把 Ruby 这个语言对我的吸引力拉到近乎于 0 的状态。

顺便引用一下一个算得上是爆典的修改:

68    | async function gotoPageWithFormMode(page: Page, formMode: "on" | "off" | "optin") {
   68 | async function gotoPageWithFormMode(page, formMode) {

用户获得了在formMode里传入 null 、undefined 、114 、5.14 、"1919"和new Date()的自由。

4929 次点击
所在节点    程序员
64 条回复
cmdOptionKana
2023-10-15 08:55:03 +08:00
你对营销号很无奈,我对你因为营销号而迁怒 Ruby 也很无奈。

一方面我理解很多人不爱讲道理,喜欢让情绪胡乱蔓延,比如报喜讯的信使获得奖赏,报坏消息的信使被砍头,但人家信使是无辜的啊;同时欲加之罪何患无辞,你也可能本来就讨厌 Ruby ,或者人家移除 TypeScript 的时候你就已经生气了,现在说什么“营销号刷屏”导致你讨厌 Ruby ,搞得好像“营销号刷屏”是主要原因似的,但这也可能只是借口而已。这些我都理解,但我也很无奈,为什么不能理性一点讲逻辑讲道理呢。
beginor
2023-10-15 10:17:04 +08:00
three.js 移除官方 ts 支持时候很多人也觉得挺无奈的
jry
2023-10-15 10:26:02 +08:00
静态类型没问题,厌恶的不是静态类型,而是不友好的语法带来的开发成本、理解成本、心智压力,TypeScript 这种语法我感觉有点怪异,乍一看不是很直观。比如 let name:string = '',如果是更符合常规静态语言习惯的 string name = '' 就好了。不过可能作者考虑到 js/ts 混编、迁移等场景,let 开头这样更方便吧。刚看了眼苹果 swift 语法,发现居然引入了 js 的 var/let 这种动态类型,说明这种便捷的方式接受度高。从 objctive-c 到 swift 实际上也变成了强制静态类型到可选动态类型。对比近日 vue3.4 会取消实验性特性语法糖$ref ,看了原因解释我也很理解,在看原因之前我觉得语法糖真方便,看了取消的原因发现确实很有道理。
crysislinux
2023-10-15 10:28:53 +08:00
@jry 那完蛋了。现在类型在后就是趋势,你可以去查查这种方式的好处在哪儿,相关资料已经很多了。
jry
2023-10-15 10:30:01 +08:00
@crysislinux 我主要做前端和 PHP ,动态类型用得多,静态接触少一些哈哈。没怎么关注。
jry
2023-10-15 10:31:55 +08:00
@crysislinux 变量定义只是举例,除了这个整个 TS 的语法我都不是很喜欢。
liberty1900
2023-10-15 10:39:02 +08:00
他可能只需要 TS 的一个很小的子集,不喜欢类型体操那些东西

JS 好像有提案要原生支持类型注解,到时候 TS 的位置一定很尴尬。如果是为了长远考虑去除 TS 其实是能够理解的

不仅仅是他,Svelte 的作者 Rich Harris 在重构 Svelte 代码库的过程中也用 JSDoc 取代了 TS
jry
2023-10-15 10:43:03 +08:00
@liberty1900 js 原生支持类型就好了,支持。
Mark24
2023-10-15 10:54:16 +08:00
静态型其实是一种倒退。

你写逻辑为什么要关心机器底层的实现细节?

就像你使用 ChatGPT ,你还必须整理清楚 每句话说的东西的变量?

这些细节都应该被抽象层屏蔽掉


之所以这种东西反复摇摆,静态型只对机器有利,大量使用对于机器优化的 feature ,说明机器又比人贵了。
ericgui
2023-10-15 10:57:32 +08:00
静态类型确实有价值
但 typescript 其实一直我都用不太好,因为有一些诡异的类型错误,你就不容易 debug
makelove
2023-10-15 11:01:15 +08:00
@Mark24 真 tm 神论,那你变量也随便 abcd 得了,没必要想个意义出来
dw2693734d
2023-10-15 11:07:01 +08:00
静态类型好点
butanediol2d
2023-10-15 11:15:06 +08:00
@jry #3 Swift 的 var/let 跟 JavaScript 的完全不是一个意思。而且 Swift 是非常强静态类型的语言。
mxalbert1996
2023-10-15 11:20:20 +08:00
@jry let/var 就动态类型了那说明你没理解什么是动态类型。那只是自动类型推断。
angrylid
2023-10-15 11:23:36 +08:00
前端程序员的至暗时刻:
10 , 别人发布的 npm 包没有 d.ts
9 ,给自己发布的 npm 包写 d.ts

楼下补充
agagega
2023-10-15 11:30:40 +08:00
DHH 对前端社区的抨击可远不止静态类型这一个:反对微服务、反对上云、反对 SPA 、反对 WebPack 、反对前端渲染,推 Turbolinks 、推 Stimulus 、推 HTML over WebSocket. 以前 Rails 社区普遍对 EmberJS 有好感,这个框架一大卖点就是纯 JavaScript.

这里是他在今年 Rails World 大会上的演讲: <amp-youtube data-videoid="iqXjGiQ_D-A" layout="responsive" width="480" height="270"></amp-youtube> 不针对 TypeScript 这件事情,只能说 DHH 这个人虽然有些偏执,但他的这套解决方案对某些开发者的确比目前所谓的「主流」方案更合适。

另外 Ruby 社区对整个 Web 开发领域的贡献可能比人们想象的大。Sass 的最初版本是 Ruby 写的,各种 env 管理工具的始祖就是 rbenv ,没记错的话主流语言包管理器里最早有 lockfile 概念的也是 Ruby 的 Bundler ,Rails 对 REST 和 12-factor apps 的贯彻到现在很多框架都没做到,而引入前端编译工具是在 2011 年。

GitHub (至今也是一个 Rails 应用)最早就是 Rails 圈子出来的,所以很长时间里 GitHub 项目最多的语言是 JavaScript 、Ruby 、Objective-C (那会要做 iOS 和 Web ,全栈三语言)。DHH 最早给 Rails 做的演示视频用的是 Mac ,那会还在 PowerPC 时代,苹果甚至找 DHH 拍过商务宣传片( https://twitter.com/dhh/status/1329062154151063552 ),那会只有很少的开发者用 Mac ,这对后来 Mac 的流行多少有点影响
TWorldIsNButThis
2023-10-15 11:34:01 +08:00
@liberty1900
尴尬什么,js 的类型提案就是做 ts 的人提的😅
Mark24
2023-10-15 11:39:18 +08:00
@makelove ts 出来之前,ts 出来之间,大家不写程序么。

TS 只是加个 type 而已。TS 出现之前,很多类型注释工具都可以更好的,无入侵解决这个问题。
kongkongye
2023-10-15 11:49:29 +08:00
没有类型定义是很可怕的,就像 java 里用 map 传参一样,你根本不知道里面可能有哪些键,只能看文档,自动提示也没了
xrr2016
2023-10-15 11:59:20 +08:00
因为写 typescript 确实烦人

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

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

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

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

© 2021 V2EX