V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
TWorldIsNButThis
V2EX  ›  程序员

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

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

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

    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 的类型。。
    enchilada2020
        22
    enchilada2020  
       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   ·   实用小工具   ·   3001 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 35ms · UTC 14:16 · PVG 22:16 · LAX 06:16 · JFK 09:16
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.