V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
MrGba2z
V2EX  ›  问与答

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

  •  
  •   MrGba2z · 2019-06-22 05:30:48 +08:00 · 2104 次点击
    这是一个创建于 1988 天前的主题,其中的信息可能已经有所发展或是发生改变。
    returnFalse () { return false;}


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


    有什么 test 或者办法可以防止这种惨案么
    第 1 条附言  ·  2019-06-22 08:01:50 +08:00
    发现内容写错了。。。。。。囧



    returnFalse () { return false;}


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

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

    写测试...吧
    secondwtq
        8
    secondwtq  
       2019-06-22 12:06:11 +08:00 via iPad
    划重点:TypeScript

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

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

    const isStarted = useRef(false)
    if (isStarted) { ... } // FUCK
    应该 if (isStarted.current) { ... }
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2866 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 02:36 · PVG 10:36 · LAX 18:36 · JFK 21:36
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.