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

2019-06-22 05:30:48 +08:00
 MrGba2z
returnFalse () { return false;}


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


有什么 test 或者办法可以防止这种惨案么
1971 次点击
所在节点    问与答
9 条回复
leishi1313
2019-06-22 07:23:26 +08:00
eslint ?虽然不知道有没有这条,实在不行 presubmit 写个正则匹配下
olantes
2019-06-22 08:26:34 +08:00
重重地给自己的脑袋来几下,几次之后就记住了
runze
2019-06-22 08:27:37 +08:00
只要声明了返回值类型就会报错
loading
2019-06-22 08:29:07 +08:00
编辑器自动补全没提示吗?
heimeil
2019-06-22 08:55:42 +08:00
if (returnFalse() === true) { }

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

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

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

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

const isStarted = useRef(false)
if (isStarted) { ... } // FUCK
应该 if (isStarted.current) { ... }

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/576357

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX