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

真的有人在项目中进行 TS 类型体操吗?

  •  
  •   waiterlin989898 · Apr 20, 2022 · 9751 views
    This topic created in 1659 days ago, the information mentioned may be changed or developed.

    因为发现自己的 TS 一直是半桶水的水平,所以想通过看一些开源的项目,看看有没有好借鉴的代码,但在 github 上翻了几个 TS 的项目,发现基本上都是 70%的正常的 JS 书写,即使有,也基本没有全面覆盖类型推断,而 TS 类型体操更是寥寥无几,但关于 TS 的话题,在前端却异常的火爆。可能是我查询的项目有问题,有没有 V 友能提供几个相关 TS 覆盖率比较全的项目,十分感谢。

    Supplement 1  ·  Apr 21, 2022
    首先感谢一些楼里的 V 友们提供的各个项目的链接,我基本也都点进去粗略看了一眼,其中符合我想说的类型体操的,以这个楼主 @Leviathann 发的 github 为代表,因为我着手改造的就是 ng 项目,但发现大类的 any 以及无类型的代码书写,楼层中 @kensoz 这位楼主的想法和我大致是一样的,因为本意是提升一下自己对 TS 的理解与使用,所以也尽可能的不想 any 一把梭哈,最后还是感谢热情的 V 友们的帮助。
    49 replies  •  2022-04-24 18:22:54 +08:00
    wobuhuicode
    wobuhuicode
    Apr 20, 2022❤️6
    1
    随着项目增大和更多人进来,后面的类型都会变成 any
    Oktfolio
    Oktfolio
    Apr 20, 2022
    2
    Angular 的项目 TS 用得应该都不差的
    ktqFDx9m2Bvfq3y4
    ktqFDx9m2Bvfq3y4
    Apr 20, 2022
    3
    看来 OP 没写过 Angular ?自从 AngularJS 升级到 Angular 后项目就都转 TS 了。
    ChefIsAwesome
    ChefIsAwesome
    Apr 20, 2022 via Android❤️1
    4
    看到很多人花时间研究某个类型怎么推导出来,我感觉本末倒置,难以理解。
    我觉得最终的 API 能有类型,好让编辑器可以提示就够了。可能是因为我从来不写什么 class 之类的东西,所以才有这种想法。
    DoubleKing
    DoubleKing
    Apr 20, 2022
    5
    同求
    linkopeneyes
    linkopeneyes
    Apr 20, 2022
    6
    ng 只能 ts 写,所以随便找个 ng 项目都是 ts 的,vue3 也是 ts 写的
    golangLover
    golangLover
    Apr 20, 2022 via Android
    7
    禁止 any 就好
    seakingii
    seakingii
    Apr 20, 2022
    8
    typescript 的类型系统,搞得我怀疑人生
    nzbin
    nzbin
    Apr 20, 2022
    9
    这个简单,直接搜 angular ,几乎都是 ts ,而且质量都很高
    shakaraka
    shakaraka
    Apr 20, 2022
    10
    我就是看 ng 源码学 ts 的,质量很高
    ruoxie
    ruoxie
    Apr 20, 2022
    11
    写了两年 TS 了,问下 TS 类型体操是什么东西。https://github.com/lowcoding/lowcode-vscode vue ,react ,node 都有
    Leviathann
    Leviathann
    Apr 20, 2022
    12
    @ruoxie 比如用 ts 的类型写一个 lisp 的解释器
    Leviathann
    Leviathann
    Apr 20, 2022
    13
    @ruoxie 偏实用方向的话,比如 lodash 的 get 函数,其实可以做到完全的类型安全
    https://github.com/sindresorhus/type-fest/blob/main/source/get.d.ts
    XCFOX
    XCFOX
    Apr 20, 2022❤️1
    14
    我见过类型体操最 6 的项目:
    https://github.com/codemix/ts-sql
    cszchen
    cszchen
    Apr 20, 2022 via iPhone
    15
    我觉得 ts 写起来很舒服啊,赶时间的时候蛋疼。
    KMpAn8Obw1QhPoEP
    KMpAn8Obw1QhPoEP
    Apr 20, 2022 via Android
    17
    @xiangwan 这个就是操场 233 不是实际项目
    magicdawn
    magicdawn
    Apr 20, 2022❤️1
    18
    dcsuibian
    dcsuibian
    Apr 20, 2022
    19
    @ruoxie 估计就是类型推测,推测( tc )= 体操( tc )。我也想了一会儿
    Loserzhu
    Loserzhu
    Apr 20, 2022
    20
    大一点的项目不用 ts 根本不会写。简历各个写熟练 ts ,随便问个如:用其他 type uitls 实现 Omit ,至少一半的都没听过 Omit Pick Exclude 这些。
    Rocketer
    Rocketer
    Apr 20, 2022 via iPhone
    21
    @Loserzhu Java 转过来的人一般喜欢 TS ,就是因为它更像 Java ,写着舒服。但他们也不会因此而去研究 TS 的特性,像写 Java 一样写 TS 才是他们想要的,也是 TS 的最大价值所在。

    前端圈之所以讨论热烈,是因为 type 对他们来说是个新鲜事物,既麻烦又有用,难免会争论。但后端谁会有兴趣讨论这低一档的玩意?

    但你这个做法是在考别人 TS 特有的东西,舍本逐末了。
    KMpAn8Obw1QhPoEP
    KMpAn8Obw1QhPoEP
    Apr 20, 2022 via Android
    22
    @Leviathann 这个在知乎上也看到过相关文章 不会就是你写的吧:)
    chihiro2014
    chihiro2014
    Apr 20, 2022
    23
    最近接手的项目都是 ng 的,然后历史遗留问题,目前是 ng5 ,不少地方其实没有写类型限制

    为了方便日后推进升级,于是只能自己慢慢动手加了
    Jooooooooo
    Jooooooooo
    Apr 20, 2022
    24
    方便的东西总是会被用上的, 所以最好的方案是禁用这种东西(机制上禁用, 而不是规范).
    tedding
    tedding
    Apr 21, 2022 via iPhone
    25
    用了 3 年的 angular……起初也被 ts 搞的焦头烂额,现在如鱼得水,两个字,丝滑……
    debuggerx
    debuggerx
    Apr 21, 2022
    26
    不用 ts 类型不会写+1 。
    真的还挺佩服不用类型系统还能写出代码的选手[狗头]
    musi
    musi
    Apr 21, 2022❤️2
    27
    楼上可能搞混了类型系统和类型体操
    这两不是一个概念
    kensoz
    kensoz
    Apr 21, 2022
    28
    学 vue3 那时候,我就想知道 ref 的类型写在哪,有没有什么最佳实践,于是就上 github 看开源项目
    90%的项目基于 Vue3 + TS 但是写法都是:let foo = ref(666)
    这种简单的类型也就算了,复杂的 dom ,bom 和对象这 90%的项目也没有加类型
    对于这 90%的项目就是把.js 改成.ts 而已
    lixm
    lixm
    Apr 21, 2022
    29
    @kensoz ref 不是支持泛型的吗? ref<T>
    anguiao
    anguiao
    Apr 21, 2022
    30
    @kensoz
    number 这种能推断出来的,本来就不需要写啊。静态类型不代表必须显式声明类型。
    当然了,模板引用这种情况,还是应该写上类型的。
    bam9
    bam9
    Apr 21, 2022
    31
    @wunonglin ng 是啥?
    darkengine
    darkengine
    Apr 21, 2022
    32
    看来我还没入门,项目里用了 TS ,但是用法是 interface 和 enum 一把梭。
    fgwmlhdkkkw
    fgwmlhdkkkw
    Apr 21, 2022
    33
    @golangLover #7 那我就用 JSON 串😀
    pigspy
    pigspy
    Apr 21, 2022
    34
    不用,大部分情况下完全用不到类型体操
    dvsilch
    dvsilch
    Apr 21, 2022
    35
    类型体操不是指各种花哨方式去实现一些偏门的类型推测吗。。。难道我理解错了?
    christin
    christin
    Apr 21, 2022 via iPhone
    36
    刚开始写 ts ,不到 100 行的代码出了一大堆错误。
    kensoz
    kensoz
    Apr 21, 2022
    37
    @anguiao 没错,我想表达的就是很多开源项目根本没有类型声明,跟别提类型体操了,就是单纯的改.js 为.ts
    kensoz
    kensoz
    Apr 21, 2022
    38
    @lixm 有的,这都是简单的,一些稍微复杂一点的地方比如 axios 的返回值和错误的类型,基本再开源项目里都没有见到过
    icyalala
    icyalala
    Apr 21, 2022
    39
    所以类型体操到底是什么
    Torpedo
    Torpedo
    Apr 21, 2022
    40
    不同人对体操的水平定义不太一样。不知道楼主体操的定义复杂度是多少
    不过,普通的开发水平,看 ts 定义,直接看官方的 https://github.com/microsoft/TypeScript/blob/main/lib/lib.dom.d.ts ,在里面找一些常见的 api ,看看他们 ts 类型就明白了
    Jsonz
    Jsonz
    Apr 21, 2022
    41
    antDesign ReactTable
    mikulch
    mikulch
    Apr 21, 2022
    42
    @Rocketer 写 java 的人怕不太喜欢 ts 哦。ts 的类型比 java 还要复杂,设计思路都不一样。
    mmmfj
    mmmfj
    Apr 21, 2022
    43
    开源库会用,项目用不到
    equt
    equt
    Apr 21, 2022 via iPhone
    44
    fp-ts ,或者说一众 FP 库,可以看一下。基本是抄了当年 OCaml 的操作,用 Module System 模拟 HKT ,然后把一些常见的代数结构搬进了 TS 。

    其实热门一些的项目可以看看 Vue 3 的几个编译时宏是怎么定义的;官方的几个新的类型,比如递归的 Awaited 是怎么随着 tsc 一步步优化进标准库的;官方的 Blog 也值得看看,尤其注意几个重要的时间节点,比如 Template String Literal 、递归类型。

    最后试着实现简单的运行时 pick 、rename 、omit 这种工具函数,困难的可以试试 encoding 和 decoding ,参考 zod 或者 io-ts ,看看后者怎么把 Lens 搬到 TS 里。

    P.S. 上面几个库的衍生品也很有意思
    justin2018
    justin2018
    Apr 21, 2022
    45
    TS 类型体操 感觉好复杂 但是有套路 要是在复杂 我没也搞不定了~~

    这个小册内容还不错 可以看看 非作者~~ 非推广~~
    TypeScript 类型体操通关秘籍
    https://juejin.cn/book/7047524421182947366
    jin5354
    jin5354
    Apr 21, 2022❤️1
    46
    实际开发中写 ts 写着写着写不下去了没太多必要纠结,直接 any ,as 什么的用起来。
    因为 ts 开发了这么多年还是个弱智,太多的类型收窄什么的不懂自动识别,写着费劲死
    keyrinrin
    keyrinrin
    Apr 21, 2022
    47
    简单用用是挺好用,但看到其它项目一堆泛型秀操作,感觉更繁杂了
    chuanqirenwu
    chuanqirenwu
    Apr 21, 2022
    48
    弱弱问一下,什么是类型体操?
    KaGaMiKun
    KaGaMiKun
    Apr 24, 2022
    49
    想起了我这边之前 vue 有人设计的组件直接 any
    但用得地方又很有限,有些地方没法重用,但打包就是没问题,一跑就红
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   1538 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 97ms · UTC 18:11 · PVG 02:11 · LAX 10:11 · JFK 13:11
    ♥ Do have faith in what you're doing.