我是个后端 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 上来就追求“雅”到极致,上泛型,上接口,类型体操,结果水太深,把握不住......
1
wu67 2023-06-15 15:20:46 +08:00
ts 有时候确实很难顶. 当然我也是个半桶水. 但是有些时候如果不 ignore, 我还真不知道该怎么写.
正常人写 document.createElement('canvas'), 然后 getContext('2d'), 谁能想到这玩意还能 Object is possibly 'null', 不加个 ignore 我都不会了... 还有就是接口字段不确定, 写着写着就蛋疼了, 甚至有数据表里没数据, 跑去请求其他系统取数的, 结果取回来字段名不一样, 我....... |
2
Morzairty 2023-06-15 15:22:43 +08:00
后端 Java/Go 仔路过,TS 写起来比 JS 简单呀。
|
3
fredsunme 2023-06-15 15:27:01 +08:00
同 java 仔 [android] 写 ts+vue3 ,感觉 ts 在我手里更像是把 js 改的更像 java 。声明形参,根据接口造 bean 等等。
泛型本身用的就少,类型体操那种推论也是。不过不声明返回值慢慢适应了,还算能接受。 |
4
lbllol365 OP |
5
lbllol365 OP @fredsunme 我原来也是这么想的,特别是玩了一段时间的 Angular ,这玩意带依赖注入,还有什么 Service 之类的概念,写起来真的和 Java 后端差不多了( Spring 魔怔人🐶)。但后来感觉,和 Go 比较像.....
|
6
Mogugugugu 2023-06-15 15:39:21 +08:00 2
Vite + TS 再加上 Volar ,用 WebStorm 写的时候简直血压拉满、
|
7
wangerka 2023-06-15 15:39:38 +08:00
python 也有类型系统啊,自带的 typing 包,但是貌似和 ts 一样也就做做样子,提升不了性能
|
8
wangerka 2023-06-15 15:45:14 +08:00
ts 属于上手门槛低( anyscript ),精通的难度高(看看这个 https://juejin.cn/post/7024673107906396190 )
|
9
shiny 2023-06-15 15:52:17 +08:00
|
10
lbllol365 OP @wangerka Python 的类型注解可以支持第三方库吗?我感觉那玩意也就能写写几个基本类型了。类型体操?不了不了,花式的搞不来。前些日子看了会 Rust ,也看到类型体操,看得头皮发麻
|
11
ChrisFreeMan 2023-06-15 16:01:43 +08:00
建议雅到底,tsconfig strict: true 开启
|
12
wangerka 2023-06-15 16:02:00 +08:00
@lbllol365 看那个第三方库有没有 typing 了,和 js 库有没有 index.d.ts 一样。我印象中写 pyqt5 就有类型注解
|
13
lbllol365 OP @shiny 感觉不错,但是后面章节要收费,先看看学习下,感谢分享
@ChrisFreeMan 嘿嘿嘿,你别说,我当时因为这个 tsconfig strict: true 踩过坑,所以后面我写项目上来就把这玩意关了 @wangerka 哦哦,这样啊,了解了 |
14
ganbuliao 2023-06-15 16:15:03 +08:00
emmm ignore
https://marketplace.visualstudio.com/items?itemName=genieai.chatgpt-vscode 这个给的一些报错的建议和修改的建议还不错 |
15
wusheng0 2023-06-15 16:45:12 +08:00
TS 类型应该比 Java 简单吧,可能是不太适应。
那个检查是 ESLint 检查?可以关掉一些规则。 |
16
locochen 2023-06-15 16:50:38 +08:00
```ts
type .... ``` 写多了, 容易脑袋涨 |
17
darkengine 2023-06-15 16:51:26 +08:00
interface 一把梭的路过
|
18
shyx 2023-06-15 17:02:36 +08:00 via Android 5
虚假的 ts 支持: vue
真正的 ts 支持: angular [strict: true] vue 对 ts 的支持浮于表面,一旦你想较真,你会发现处处受限 |
21
thinkershare 2023-06-15 18:39:23 +08:00
@wusheng0 Java 的类型才是简单静态的。TS 的类型太灵活,而且 TS 支持了太多高级的类型运算,我感觉在所有语言中 TS 的类型计算是最变态的,已经到了快失控的边缘了,如果不是因为 TS 使用了类型擦除的模式,TS 的类型系统是不可能做成现在这样的计算模式的。
|
22
Leviathann 2023-06-15 19:19:24 +08:00
@shyx 对于一般的框架,是框架支持 ts
而对于 React ,是 ts 支持他 |
23
fgwmlhdkkkw 2023-06-15 22:13:14 +08:00 via Android
python 也有 type hit 的
|
24
hzzhzzdogee 2023-06-15 22:26:53 +08:00
ts 类型系统可是图灵完备的, 能直接编程的[doge]
|
25
kingjpa 2023-06-15 22:45:11 +08:00
完全相反,写多了 php 和 js ,
写静态每次都蛋疼,一个变量为什么要约定类型,自动推导不好吗? 多此一举, 再加上 go 和 java 变量名称和类型顺序正好相反,更蛋疼了 |
26
zhangk23 2023-06-15 22:56:57 +08:00
技术 能用就行
|
27
daliusu 2023-06-15 23:10:49 +08:00 2
@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 的在前端还挺多的,!这个符号挺重要
|
28
daliusu 2023-06-15 23:16:52 +08:00
Vue3 其实 ts 支持也挺差的,如果你用 tsx 还好,也就是 props 和 emit 、slots 比较烂,自己封装一下也不是不能用,继续 vue 模版+ts 的话简直是要死人
|
31
Imindzzz 2023-06-16 07:46:44 +08:00 via Android 2
Spring 写不好:太强了,我要再加油认真学,😍😍
前端 TS 写不好:什么垃圾玩意,看了两个小时都学不会,🤡🤡 |
32
crackidz 2023-06-16 08:17:40 +08:00
到处 any ignore 的,你为什么不写 JS...
要不要考虑一下 React? |
33
byte10 2023-06-16 08:28:24 +08:00
@kingjpa 让我放弃学习 go 的很大的原因就是类型和变量名相反,mad ,跟常用的语言都相反,这坑爹的设计,气死人了。。。
其实我更喜欢写 JS 多一些,加上 eslint 完全没问题,基本没用过代码调试,一把梭就搞定了。虽然开发效率高,但是维护性差一些,不过偏向过程化编程都差不多,如果你用 TS 最好 往 面向对象编程的风格好一些,开发起来复用性高一些。 |
34
secondwtq 2023-06-16 08:47:10 +08:00
感受:楼主的描述与我的刻板印象相冲突
一般来说,前端才是喜欢折腾“雅”的,后端就喜欢硬糊 |
35
lbllol365 OP |
36
toesbieya 2023-06-16 09:06:45 +08:00 1
ts 用起来有点像自己给自己写语法提示,没必要追求完美处处都是强类型,java 不也一堆需要强转
|
38
godleon 2023-06-16 09:25:19 +08:00
同样后端 Java, 之前也是一直写 js +vue2/3 ,但是后来用 cocos 写了个小游戏的时候,用 ts 写脚本,就感觉 ts 的编码跟 Java 更像,写出来代码比 js 更好读懂(对于 Java 来讲),其实我真的绝对 css 对后端来讲才是一大砍~
|
40
Masoud2023 2023-06-16 09:38:47 +08:00
Any 、Object 、?,他们永远是我们的好朋友🤣
|
41
Masoud2023 2023-06-16 09:39:55 +08:00
还有 @SuppressWarnings("rawtypes")
|
42
bojackhorseman 2023-06-16 10:01:35 +08:00
@wu67
const myCanvas = document.createElement('canvas')! const ctx = myCanvas.getContext('2d')! 活用非空断言,前提是你确定结果真的不会是 null |
43
uni 2023-06-16 10:12:58 +08:00
哈哈哈,说一个另类的道路,去尝试一下纯函数式编程( Haskell 那种),然后写业务的时候思考下用函数式会怎么写,这样多思考会对类型系统的理解更深刻些(什么代数数据类型之类的写着写着就很自然了,不然很多东西只是流于表面不知道怎么去思考这个问题自然地得到正确的结果
|
44
t783072156 2023-06-16 10:19:14 +08:00
ts 还能比 java 的类型复杂。。真的假的
|
45
lbllol365 OP @uni 去年看《七周七并发模型》这本书,讲到 Erlang 的 Actor 模式,看得我热血沸腾,”这我不分分钟手搓一个 RabbitMQ“🐶。然后配好了 Elixir 环境,找了书教程开始看,一上手写人傻了,我是菜鸡。后面还折腾过 Clojure ,但是都因为学习的优先级太低最后不了了之了,不过还是很想好好看看 Erlang 和 Clojure 这种函数式语言的,有空再说吧。
|
46
Leviathann 2023-06-16 10:32:04 +08:00
@t783072156 typescript 可以用类型系统本身写 lisp 解释器
|
47
MEIerer 2023-06-16 11:00:47 +08:00
ts 为了兼容 js 的动态性,肯定复杂
|
48
vone 2023-06-16 11:42:15 +08:00
你太客气了,TypeScript 用到业务代码里就是狗屎。
|
49
wowawesome 2023-06-16 14:14:15 +08:00
还是 js 吧,有一个能跑就行
|
50
yueye115 2023-06-16 15:17:44 +08:00
哈哈, 专门写动态语言的, 表示 ts 很难受, 时间基本都花在定义类型上. 不过定义完了, 写的还是很爽
|
51
Terry05 2023-06-16 15:48:42 +08:00
雅到极致不风流,还是脱了裤子唱昆曲吧
|
52
Ficelle 2023-06-16 16:00:58 +08:00
弱类型就这个样子。
|
53
HaroldFinchNYC 2023-06-16 23:59:56 +08:00
说明你用的 vue3 不行
这事不赖 tyepescript |
54
pkupyx 2023-06-17 02:27:30 +08:00
tsconfig strict=false
|