v2gba
V2EX  ›  问与答

Typescript 如何防止忘写函数括号?

  •  
  •   v2gba · Jun 22, 2019 · 2743 views
    This topic created in 2556 days ago, the information mentioned may be changed or developed.
    returnFalse () { return false;}


    returnFalse() ---> false
    returnTrue() ---> true


    有什么 test 或者办法可以防止这种惨案么
    Supplement 1  ·  Jun 22, 2019
    发现内容写错了。。。。。。囧



    returnFalse () { return false;}


    returnFalse() ---> false
    returnFalse ---> true
    9 replies    2019-06-22 12:43:18 +08:00
    leishi1313
        1
    leishi1313  
       Jun 22, 2019 via Android
    eslint ?虽然不知道有没有这条,实在不行 presubmit 写个正则匹配下
    olantes
        2
    olantes  
       Jun 22, 2019 via Android
    重重地给自己的脑袋来几下,几次之后就记住了
    runze
        3
    runze  
       Jun 22, 2019 via Android
    只要声明了返回值类型就会报错
    loading
        4
    loading  
       Jun 22, 2019
    编辑器自动补全没提示吗?
    heimeil
        5
    heimeil  
       Jun 22, 2019
    if (returnFalse() === true) { }

    作为参数传递的时候写清楚类型声明就传不了了,直接报错就不会忘了
    marcong95
        6
    marcong95  
       Jun 22, 2019
    TS 还有这个问题? returnFalse 明明是个 Function 又不是 Boolean,你往不该放 Function 的地方写了 returnFalse,tsc 不报错吗?
    momocraft
        7
    momocraft  
       Jun 22, 2019
    不知如何在语法层解决,如果用 lint 强制 if (boolean) 好像又太超过了

    写测试...吧
    secondwtq
        8
    secondwtq  
       Jun 22, 2019 via iPad
    划重点:TypeScript

    既然是 TypeScript,那么就通过编译器 hack 或者 lint 之类的静态分析方式,把 “ if (Function)”, “ Function == Boolean ”, :“ Function;” 这种构造给禁掉就行

    当然,“ Function? == Boolean ” 这种还是要留着的
    love
        9
    love  
       Jun 22, 2019
    这种类型系统没办法,我也碰到过坑,比如写 hooks:

    const isStarted = useRef(false)
    if (isStarted) { ... } // FUCK
    应该 if (isStarted.current) { ... }
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   2543 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 45ms · UTC 15:26 · PVG 23:26 · LAX 08:26 · JFK 11:26
    ♥ Do have faith in what you're doing.