V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
waiterlin989898
V2EX  ›  程序员

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

  •  
  •   waiterlin989898 · 115 天前 · 4919 次点击
    这是一个创建于 115 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

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

    这个小册内容还不错 可以看看 非作者~~ 非推广~~
    TypeScript 类型体操通关秘籍
    https://juejin.cn/book/7047524421182947366
    jin5354
        46
    jin5354  
       114 天前
    实际开发中写 ts 写着写着写不下去了没太多必要纠结,直接 any ,as 什么的用起来。
    因为 ts 开发了这么多年还是个弱智,太多的类型收窄什么的不懂自动识别,写着费劲死
    keyrinrin
        47
    keyrinrin  
       114 天前
    简单用用是挺好用,但看到其它项目一堆泛型秀操作,感觉更繁杂了
    chuanqirenwu
        48
    chuanqirenwu  
       114 天前
    弱弱问一下,什么是类型体操?
    KaGaMiKun
        49
    KaGaMiKun  
       111 天前
    想起了我这边之前 vue 有人设计的组件直接 any
    但用得地方又很有限,有些地方没法重用,但打包就是没问题,一跑就红
    关于   ·   帮助文档   ·   API   ·   FAQ   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   1037 人在线   最高记录 5497   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 63ms · UTC 21:25 · PVG 05:25 · LAX 14:25 · JFK 17:25
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.