• 请不要在回答技术问题时复制粘贴 AI 生成的内容
lbllol365
V2EX  ›  程序员

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

  •  1
     
  •   lbllol365 · Jun 15, 2023 · 9486 views
    This topic created in 1239 days ago, the information mentioned may be changed or developed.

    我是个后端 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 上来就追求“雅”到极致,上泛型,上接口,类型体操,结果水太深,把握不住......

    56 replies  •  2024-09-23 12:40:48 +08:00
    wu67
    wu67
    Jun 15, 2023
    1
    ts 有时候确实很难顶. 当然我也是个半桶水. 但是有些时候如果不 ignore, 我还真不知道该怎么写.

    正常人写 document.createElement('canvas'), 然后 getContext('2d'), 谁能想到这玩意还能 Object is possibly 'null', 不加个 ignore 我都不会了...

    还有就是接口字段不确定, 写着写着就蛋疼了, 甚至有数据表里没数据, 跑去请求其他系统取数的, 结果取回来字段名不一样, 我.......
    Morzairty
    Morzairty
    Jun 15, 2023
    2
    后端 Java/Go 仔路过,TS 写起来比 JS 简单呀。
    fredsunme
    fredsunme
    Jun 15, 2023
    3
    同 java 仔 [android] 写 ts+vue3 ,感觉 ts 在我手里更像是把 js 改的更像 java 。声明形参,根据接口造 bean 等等。
    泛型本身用的就少,类型体操那种推论也是。不过不声明返回值慢慢适应了,还算能接受。
    lbllol365
    lbllol365
    OP
    Jun 15, 2023
    4
    @wu67 害!
    @Morzairty 我觉得在“容错性”或者叫对开发者的”某种宽容度“上,JS 要比 TS”简单“。但如果习惯 TS 的规范,确实 TS 比 JS 简单
    lbllol365
    lbllol365
    OP
    Jun 15, 2023
    5
    @fredsunme 我原来也是这么想的,特别是玩了一段时间的 Angular ,这玩意带依赖注入,还有什么 Service 之类的概念,写起来真的和 Java 后端差不多了( Spring 魔怔人🐶)。但后来感觉,和 Go 比较像.....
    Mogugugugu
    Mogugugugu
    Jun 15, 2023❤️2
    6
    Vite + TS 再加上 Volar ,用 WebStorm 写的时候简直血压拉满、
    wangerka
    wangerka
    Jun 15, 2023
    7
    python 也有类型系统啊,自带的 typing 包,但是貌似和 ts 一样也就做做样子,提升不了性能
    wangerka
    wangerka
    Jun 15, 2023
    8
    ts 属于上手门槛低( anyscript ),精通的难度高(看看这个 https://juejin.cn/post/7024673107906396190 )
    lbllol365
    lbllol365
    OP
    Jun 15, 2023
    10
    @wangerka Python 的类型注解可以支持第三方库吗?我感觉那玩意也就能写写几个基本类型了。类型体操?不了不了,花式的搞不来。前些日子看了会 Rust ,也看到类型体操,看得头皮发麻
    ChrisFreeMan
    ChrisFreeMan
    Jun 15, 2023
    11
    建议雅到底,tsconfig strict: true 开启
    wangerka
    wangerka
    Jun 15, 2023
    12
    @lbllol365 看那个第三方库有没有 typing 了,和 js 库有没有 index.d.ts 一样。我印象中写 pyqt5 就有类型注解
    lbllol365
    lbllol365
    OP
    Jun 15, 2023
    13
    @shiny 感觉不错,但是后面章节要收费,先看看学习下,感谢分享
    @ChrisFreeMan 嘿嘿嘿,你别说,我当时因为这个 tsconfig strict: true 踩过坑,所以后面我写项目上来就把这玩意关了
    @wangerka 哦哦,这样啊,了解了
    ganbuliao
    ganbuliao
    Jun 15, 2023
    14
    emmm ignore
    https://marketplace.visualstudio.com/items?itemName=genieai.chatgpt-vscode
    这个给的一些报错的建议和修改的建议还不错
    wusheng0
    wusheng0
    Jun 15, 2023
    15
    TS 类型应该比 Java 简单吧,可能是不太适应。
    那个检查是 ESLint 检查?可以关掉一些规则。
    locochen
    locochen
    Jun 15, 2023
    16
    ```ts
    type ....
    ```
    写多了, 容易脑袋涨
    darkengine
    darkengine
    Jun 15, 2023
    17
    interface 一把梭的路过
    shyx
    shyx
    Jun 15, 2023 via Android❤️5
    18
    虚假的 ts 支持: vue
    真正的 ts 支持: angular [strict: true]
    vue 对 ts 的支持浮于表面,一旦你想较真,你会发现处处受限
    lbllol365
    lbllol365
    OP
    Jun 15, 2023
    19
    @ganbuliao 账号不好搞啊,去微软看看吧
    @wusheng0 ESLint: disable 🐶
    lbllol365
    lbllol365
    OP
    Jun 15, 2023
    20
    @shyx 确实有那么一点感觉。但我不是专业前端,用得比较浅,就也还行吧...
    thinkershare
    thinkershare
    Jun 15, 2023
    21
    @wusheng0 Java 的类型才是简单静态的。TS 的类型太灵活,而且 TS 支持了太多高级的类型运算,我感觉在所有语言中 TS 的类型计算是最变态的,已经到了快失控的边缘了,如果不是因为 TS 使用了类型擦除的模式,TS 的类型系统是不可能做成现在这样的计算模式的。
    Leviathann
    Leviathann
    Jun 15, 2023
    22
    @shyx 对于一般的框架,是框架支持 ts
    而对于 React ,是 ts 支持他
    fgwmlhdkkkw
    fgwmlhdkkkw
    Jun 15, 2023 via Android
    23
    python 也有 type hit 的
    hzzhzzdogee
    hzzhzzdogee
    Jun 15, 2023
    24
    ts 类型系统可是图灵完备的, 能直接编程的[doge]
    kingjpa
    kingjpa
    Jun 15, 2023
    25
    完全相反,写多了 php 和 js ,
    写静态每次都蛋疼,一个变量为什么要约定类型,自动推导不好吗? 多此一举,
    再加上 go 和 java 变量名称和类型顺序正好相反,更蛋疼了
    zhangk23
    zhangk23
    Jun 15, 2023
    26
    技术 能用就行
    daliusu
    daliusu
    Jun 15, 2023❤️2
    27
    @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
    daliusu
    Jun 15, 2023
    28
    Vue3 其实 ts 支持也挺差的,如果你用 tsx 还好,也就是 props 和 emit 、slots 比较烂,自己封装一下也不是不能用,继续 vue 模版+ts 的话简直是要死人
    chuck1in
    chuck1in
    Jun 16, 2023 via iPhone
    29
    @daliusu 按照规范来说好像严格模式不允许用非空断言。
    liantian
    liantian
    Jun 16, 2023 via iPhone
    30
    @wangerka python 的 type 不能改善性能,但是可以大幅改善 ide 的体验啊…
    Imindzzz
    Imindzzz
    PRO
    Jun 16, 2023 via Android❤️2
    31
    Spring 写不好:太强了,我要再加油认真学,😍😍

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

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

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

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

    活用非空断言,前提是你确定结果真的不会是 null
    uni
    uni
    Jun 16, 2023
    43
    哈哈哈,说一个另类的道路,去尝试一下纯函数式编程( Haskell 那种),然后写业务的时候思考下用函数式会怎么写,这样多思考会对类型系统的理解更深刻些(什么代数数据类型之类的写着写着就很自然了,不然很多东西只是流于表面不知道怎么去思考这个问题自然地得到正确的结果
    t783072156
    t783072156
    Jun 16, 2023
    44
    ts 还能比 java 的类型复杂。。真的假的
    lbllol365
    lbllol365
    OP
    Jun 16, 2023
    45
    @uni 去年看《七周七并发模型》这本书,讲到 Erlang 的 Actor 模式,看得我热血沸腾,”这我不分分钟手搓一个 RabbitMQ“🐶。然后配好了 Elixir 环境,找了书教程开始看,一上手写人傻了,我是菜鸡。后面还折腾过 Clojure ,但是都因为学习的优先级太低最后不了了之了,不过还是很想好好看看 Erlang 和 Clojure 这种函数式语言的,有空再说吧。
    Leviathann
    Leviathann
    Jun 16, 2023
    46
    @t783072156 typescript 可以用类型系统本身写 lisp 解释器
    MEIerer
    MEIerer
    Jun 16, 2023
    47
    ts 为了兼容 js 的动态性,肯定复杂
    vone
    vone
    Jun 16, 2023
    48
    你太客气了,TypeScript 用到业务代码里就是狗屎。
    wowawesome
    wowawesome
    Jun 16, 2023
    49
    还是 js 吧,有一个能跑就行
    yueye115
    yueye115
    Jun 16, 2023
    50
    哈哈, 专门写动态语言的, 表示 ts 很难受, 时间基本都花在定义类型上. 不过定义完了, 写的还是很爽
    Terry05
    Terry05
    Jun 16, 2023
    51
    雅到极致不风流,还是脱了裤子唱昆曲吧
    Ficelle
    Ficelle
    Jun 16, 2023
    52
    弱类型就这个样子。
    HaroldFinchNYC
    HaroldFinchNYC
    Jun 16, 2023
    53
    说明你用的 vue3 不行
    这事不赖 tyepescript
    pkupyx
    pkupyx
    Jun 17, 2023
    54
    tsconfig strict=false
    lizy0329
    lizy0329
    Sep 23, 2024
    55
    @wu67 有些低版本浏览器不支持 Context2D ,Typescript 为了你写出的代码能够强壮点,也是费尽心思啊
    lizy0329
    lizy0329
    Sep 23, 2024
    56
    @vone 怎么可能,现在基本是个项目都会用 Ts 限制
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   3970 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 164ms · UTC 01:04 · PVG 09:04 · LAX 17:04 · JFK 20:04
    ♥ Do have faith in what you're doing.