特别讨厌三目的人,第一次看到各种库的 typescript 的类型声明是什么感觉 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
TWorldIsNButThis
V2EX    程序员

特别讨厌三目的人,第一次看到各种库的 typescript 的类型声明是什么感觉

  •  1
     
  •   TWorldIsNButThis 2022-04-29 01:56:51 +08:00 5936 次点击
    这是一个创建于 1261 天前的主题,其中的信息可能已经有所发展或是发生改变。

    我个人觉得三目还可以,但前提是格式化必须严格做到

    xxxx ? aaaa : bbbb 

    这种格式,这样的话两三层以内都完全不会有歧义,各个分支都看得比较清楚

    但是第一次看到包含各种奇奇怪怪格式的三目的类型声明的时候还是不免骂一句,这写的什么寄吧

    29 条回复    2022-04-30 00:34:45 +08:00
    WuSiYu
        1
    WuSiYu  
       2022-04-29 02:30:54 +08:00 via iPhone
    三目套三目写复杂逻辑的一律认为有大病
    (除非是 verilog ,doge )
    TWorldIsNButThis
        2
    TWorldIsNButThis  
    OP
       2022-04-29 02:38:31 +08:00 via iPhone
    @WuSiYu 三目是 typescript 类型语言的核心语法
    yuzo555
        3
    yuzo555  
       2022-04-29 02:41:40 +08:00
    只要加了括号,编辑器能主动高亮匹配的括号,我没什么意见。
    liuidetmks
        4
    liuidetmks  
       2022-04-29 06:14:29 +08:00 via iPhone
    if a return a
    else return b 你不觉得麻烦?

    还有,不是一些框架 只能接受 表达式吗 ,vue 里面
    golangLover
        5
    golangLover  
       2022-04-29 08:07:47 +08:00 via Android
    typescript 的程序员写代码都有临深为高的感觉
    Lighfer
        6
    Lighfer  
       2022-04-29 08:26:34 +08:00
    @liuidetmks return a || b
    djs
        7
    djs  
       2022-04-29 08:47:45 +08:00 via iPhone
    最近参考人家的写了个类型生命,长见识了…
    focuxin
        8
    focuxin  
       2022-04-29 08:53:14 +08:00
    const {name} = this.options || {};
    superfatboy
        9
    superfatboy  
       2022-04-29 09:36:01 +08:00
    天天写 ts ,天天用三母,爽的一批,开始学 go 了,发现没三目,很难受
    ZE3kr
        10
    ZE3kr  
       2022-04-29 09:38:30 +08:00 via iPhone
    is_a ? b : is_c ? d : is _e ? f : g
    完美
    nothingistrue
        11
    nothingistrue  
       2022-04-29 09:43:17 +08:00
    Java 里面,三目运算符不是用来赋值的,或者赋值加三目表达式加起来超过一行或换行,是要被打死的。

    三目运算符当逻辑操作,还有逻辑运算符里面参杂赋值操作( a is not null && a=2 这种),在脚本语言,还有追求最少操作(并忽略可读性)的算法里面,用得还是很多的。但我不相信 typescript 会把这当核心用法。
    CodeCodeStudy
        12
    CodeCodeStudy  
       2022-04-29 09:45:57 +08:00
    TypeScript 本来就不是一门独立的语言,TypeScript 的三目就是 Javascript 的三目
    sunhelter
        13
    sunhelter  
       2022-04-29 09:49:51 +08:00
    var a = b switch { 1="A",2="B",_="" };
    完美
    zjccc
        14
    zjccc  
       2022-04-29 09:55:41 +08:00   3
    只是 ts 类型声明也只能用三目了吧,上面的朋友没理解这是啥玩意,贴个膈应人的

    ```typescript

    type IsEqual<A, B> = (<T>() => T extends A ? 1 : 2) extends <T1>() => T1 extends B ? 1 : 2 ? true : false

    ```
    irisdev
        15
    irisdev  
       2022-04-29 10:02:45 +08:00
    楼主说的是这种
    race<T>(values: readonly T[]): Promise<T extends PromiseLike<infer U> ? U : T>;
    marcong95
        16
    marcong95  
       2022-04-29 10:10:47 +08:00
    那你对于那种 xxx ? 1 : 0 这种你也要拆 3 行写吗?
    statumer
        17
    statumer  
       2022-04-29 10:24:03 +08:00 via iPhone
    那你去给 Typescript 贡献个 constexpr 吧。
    类型声明这样的 DSL 不用函数式类型体操还想怎样
    libook
        18
    libook  
       2022-04-29 11:10:36 +08:00
    代码风格限定协作群体就好了,没必要要求全网所有人按照统一风格来写,否则不如换其他本身格式要求高的语言。

    每个团队的人员习惯和水平不一样,需要团队内部对代码风格达成一致,然后以制度和 Lint 规则的形式来约束,确保大家高效协作就好。
    AyaseEri
        19
    AyaseEri  
       2022-04-29 11:13:28 +08:00
    type Foo<T> = T extends Foo ? T extends Bar ? Omit<T, "options"> : Partial<T> : T
    learningman
        20
    learningman  
       2022-04-29 11:24:46 +08:00
    ts 的类型声明说不定是编译出来的,给 language-server 看的。。。
    ccraohng
        21
    ccraohng  
       2022-04-29 11:38:47 +08:00
    ts 是越智能越复杂

    可以看 stitches 的类型。。
    KMpAn8Obw1QhPoEP
        22
    KMpAn8Obw1QhPoEP  
       2022-04-29 12:42:11 +08:00 via Android
    没办法啊 类型操作里只能用表达式 表达式里用来表示 if else 的就是三目运算 别说 if else 了 连逻辑运算都没有 就只能一层一层套
    hujun528
        23
    hujun528  
       2022-04-29 13:02:33 +08:00
    @superfatboy 用泛型 自己写个三目 方法
    aguesuka
        24
    aguesuka  
       2022-04-29 13:14:20 +08:00
    这不是三目运算, 这是 Conditional Types
    wolfie
        25
    wolfie  
       2022-04-29 14:25:03 +08:00
    没三目,代码会丑好多。
    zooeymango
        26
    zooeymango  
       2022-04-29 14:32:08 +08:00
    哈哈哈, 有时候写 ts 冒号问号最后写的我自己都晕了
    chenmobuys
        27
    chenmobuys  
       2022-04-29 14:50:57 +08:00
    js 本来就乱,ts 还要兼容 js ,又要开发一套新的语法,乱上加乱。java 的类型更清晰一点。
    stimw
        28
    stimw  
       2022-04-29 15:56:21 +08:00
    要这样说 pythonic 其实也有很多奇怪(抄近路)的写法,第一眼还看不懂。
    同理 c++
    mosade
        29
    mosade  
       2022-04-30 00:34:45 +08:00
    众所周知,TypeScript 拥有一个图灵完备的类型系统[手动狗头]
    https://github.com/type-challenges/type-challenges/blob/main/questions/08804-hard-two-sum/README.md
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1042 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 29ms UTC 18:25 PVG 02:25 LAX 11:25 JFK 14:25
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86