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

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

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

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

    xxxx 
      ? aaaa
      : bbbb
    

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

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

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

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

    三目运算符当逻辑操作,还有逻辑运算符里面参杂赋值操作( a is not null && a=2 这种),在脚本语言,还有追求最少操作(并忽略可读性)的算法里面,用得还是很多的。但我不相信 typescript 会把这当核心用法。
    CodeCodeStudy
        12
    CodeCodeStudy  
       68 天前
    TypeScript 本来就不是一门独立的语言,TypeScript 的三目就是 JavaScript 的三目
    sunhelter
        13
    sunhelter  
       68 天前
    var a = b switch { 1="A",2="B",_="" };
    完美
    zjccc
        14
    zjccc  
       68 天前   ❤️ 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  
       68 天前
    楼主说的是这种
    race<T>(values: readonly T[]): Promise<T extends PromiseLike<infer U> ? U : T>;
    marcong95
        16
    marcong95  
       68 天前
    那你对于那种 xxx ? 1 : 0 这种你也要拆 3 行写吗?
    statumer
        17
    statumer  
       68 天前 via iPhone
    那你去给 Typescript 贡献个 constexpr 吧。
    类型声明这样的 DSL 不用函数式类型体操还想怎样
    libook
        18
    libook  
       68 天前
    代码风格限定协作群体就好了,没必要要求全网所有人按照统一风格来写,否则不如换其他本身格式要求高的语言。

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

    可以看 stitches 的类型。。
    enchilada2020
        22
    enchilada2020  
       68 天前 via Android
    没办法啊 类型操作里只能用表达式 表达式里用来表示 if else 的就是三目运算 别说 if else 了 连逻辑运算都没有 就只能一层一层套
    hujun528
        23
    hujun528  
       68 天前
    @superfatboy 用泛型 自己写个三目 方法
    aguesuka
        24
    aguesuka  
       68 天前
    这不是三目运算, 这是 Conditional Types
    wolfie
        25
    wolfie  
       68 天前
    没三目,代码会丑好多。
    zooeymango
        26
    zooeymango  
       68 天前
    哈哈哈, 有时候写 ts 冒号问号最后写的我自己都晕了
    chenmobuys
        27
    chenmobuys  
       68 天前
    js 本来就乱,ts 还要兼容 js ,又要开发一套新的语法,乱上加乱。java 的类型更清晰一点。
    stimw
        28
    stimw  
       67 天前
    要这样说 pythonic 其实也有很多奇怪(抄近路)的写法,第一眼还看不懂。
    同理 c++
    mosade
        29
    mosade  
       67 天前
    众所周知,TypeScript 拥有一个图灵完备的类型系统[手动狗头]
    https://github.com/type-challenges/type-challenges/blob/main/questions/08804-hard-two-sum/README.md
    关于   ·   帮助文档   ·   API   ·   FAQ   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   4123 人在线   最高记录 5497   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 117ms · UTC 06:55 · PVG 14:55 · LAX 23:55 · JFK 02:55
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.