一个后端 Java 仔对 TS 的复杂感受

2023-06-15 15:10:43 +08:00
 lbllol365

我是个后端 Java 仔,工作除了写 Java 外,还要写一些比较简单的 Vue2 ,用的 JS 。除了 Java 和 JS ,自己平时也写点 Python 和 Go 。我写 JS 和 Python 最不爽的地方是因为是动态类型语言,IDE 提示比较差(我用的正版 Jetbrains 系 IDE ,所以一直更的最新版,效果也很差),我写一个函数,参数和返回值类型都不知道是啥,习惯了强类型就很难受,这个我感觉在用各种 Python 第三方库处理数据时更明显,各个库的类型还不兼容,就报错。

说回 TS 和 JS 。工作用 JS ,硬糊完成任务也就算了。业余写代码可得提高标准,就寻思用 TS“雅一雅”。上 Vue3 、TS 。Github 上翻人家的 TS 代码,感慨:好“雅”。等自己写起来,发现“雅”不动了。到处的 @ts-ignore ,再就是 IDE 波浪线提示,狂按 Alt+Enter 自动修改之后,卧槽?这改出个什么东西。我觉得造成这种情况,一是自己确实不是专业前端,水平不够,JS 也就个半吊子。二是可能我用 TS 上来就追求“雅”到极致,上泛型,上接口,类型体操,结果水太深,把握不住......

7603 次点击
所在节点    程序员
56 条回复
thinkershare
2023-06-15 18:39:23 +08:00
@wusheng0 Java 的类型才是简单静态的。TS 的类型太灵活,而且 TS 支持了太多高级的类型运算,我感觉在所有语言中 TS 的类型计算是最变态的,已经到了快失控的边缘了,如果不是因为 TS 使用了类型擦除的模式,TS 的类型系统是不可能做成现在这样的计算模式的。
Leviathann
2023-06-15 19:19:24 +08:00
@shyx 对于一般的框架,是框架支持 ts
而对于 React ,是 ts 支持他
fgwmlhdkkkw
2023-06-15 22:13:14 +08:00
python 也有 type hit 的
hzzhzzdogee
2023-06-15 22:26:53 +08:00
ts 类型系统可是图灵完备的, 能直接编程的[doge]
kingjpa
2023-06-15 22:45:11 +08:00
完全相反,写多了 php 和 js ,
写静态每次都蛋疼,一个变量为什么要约定类型,自动推导不好吗? 多此一举,
再加上 go 和 java 变量名称和类型顺序正好相反,更蛋疼了
zhangk23
2023-06-15 22:56:57 +08:00
技术 能用就行
daliusu
2023-06-15 23:10:49 +08:00
@wu67 #1 ts 如果不搭配 openapi 自动生成接口,直接废了一半。你说的 Object is possibly 'null'这个问题,事实上这反倒证明了 ts 的好,因为他确实有可能是 null 的... 比如你调用一下.getContext("webgl"),然后这个对象再调用 getContext('2d') 就会返回 null ,ts 检测不出来你是不是调用过其他类型的 context 。如果你确定没有调用过其他 context ,可以使用 document.createElement('canvas').getContext('2d')!.xxx ,这种可以为 null 的在前端还挺多的,!这个符号挺重要
daliusu
2023-06-15 23:16:52 +08:00
Vue3 其实 ts 支持也挺差的,如果你用 tsx 还好,也就是 props 和 emit 、slots 比较烂,自己封装一下也不是不能用,继续 vue 模版+ts 的话简直是要死人
chuck1in
2023-06-16 06:51:10 +08:00
@daliusu 按照规范来说好像严格模式不允许用非空断言。
liantian
2023-06-16 07:31:38 +08:00
@wangerka python 的 type 不能改善性能,但是可以大幅改善 ide 的体验啊…
Imindzzz
2023-06-16 07:46:44 +08:00
Spring 写不好:太强了,我要再加油认真学,😍😍

前端 TS 写不好:什么垃圾玩意,看了两个小时都学不会,🤡🤡
crackidz
2023-06-16 08:17:40 +08:00
到处 any ignore 的,你为什么不写 JS...

要不要考虑一下 React?
byte10
2023-06-16 08:28:24 +08:00
@kingjpa 让我放弃学习 go 的很大的原因就是类型和变量名相反,mad ,跟常用的语言都相反,这坑爹的设计,气死人了。。。

其实我更喜欢写 JS 多一些,加上 eslint 完全没问题,基本没用过代码调试,一把梭就搞定了。虽然开发效率高,但是维护性差一些,不过偏向过程化编程都差不多,如果你用 TS 最好 往 面向对象编程的风格好一些,开发起来复用性高一些。
secondwtq
2023-06-16 08:47:10 +08:00
感受:楼主的描述与我的刻板印象相冲突

一般来说,前端才是喜欢折腾“雅”的,后端就喜欢硬糊
lbllol365
2023-06-16 09:02:48 +08:00
@kingjpa 发动魔法卡“融合”!🐶
@zhangk23 就是!
@Imindzzz 毕竟我是个后端,Spring 写好了,面试唬住面试官,要 50k🐶。我可没说 TS 的不好,我只是初学,不太适应🐶
@crackidz 几乎没有用 any ,ignore 有不少,这些是因为对 TS 的一些语法不熟,没办法。用 TS 就是为了用类型这一套
@secondwtq 你都说“刻板印象“了🐶。其实我是全栈(干)的啦
toesbieya
2023-06-16 09:06:45 +08:00
ts 用起来有点像自己给自己写语法提示,没必要追求完美处处都是强类型,java 不也一堆需要强转
AyaseEri
2023-06-16 09:12:08 +08:00
@wu67 possibly null 一般不是直接一个 if 判断存不存在就过了么
godleon
2023-06-16 09:25:19 +08:00
同样后端 Java, 之前也是一直写 js +vue2/3 ,但是后来用 cocos 写了个小游戏的时候,用 ts 写脚本,就感觉 ts 的编码跟 Java 更像,写出来代码比 js 更好读懂(对于 Java 来讲),其实我真的绝对 css 对后端来讲才是一大砍~
lbllol365
2023-06-16 09:31:06 +08:00
@godleon 哈哈哈,css ,确实,不过可以试试 Tailwind css
Masoud2023
2023-06-16 09:38:47 +08:00
Any 、Object 、?,他们永远是我们的好朋友🤣

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

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

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

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

© 2021 V2EX