【发布时间】:2021-02-23 13:54:43
【问题描述】:
我只是想知道这一点,因为我已经在代码中看到过几次。在 typescript 枚举中检查 undefined 有时会导致像本例中那样的意外行为。
enum DoSomething {
VALUE1,
VALUE2,
VALUE3,
}
function doSomething(doSomething?: DoSomething): void {
if (doSomething) {
console.log('do something')
} else {
console.log('do nothing')
}
}
doSomething(undefined) // -> do nothing
doSomething(DoSomething.VALUE1) // -> do nothing
doSomething(DoSomething.VALUE2) // -> do something
这当然是因为枚举的 VALUE1 实际上是 0。在枚举的第一个位置使用 NONE 之类的东西并且不允许 undefined 以防止其他人遇到这种情况是否有意义?
enum DoSomething {
NONE,
VALUE1,
VALUE2,
VALUE3,
}
function doSomething(doSomething: DoSomething): void {
if (doSomething) {
console.log('do something')
} else {
console.log('do nothing')
}
}
doSomething(DoSomething.NONE) // -> do nothing
doSomething(DoSomething.VALUE1) // -> do something
doSomething(DoSomething.VALUE2) // -> do something
我的意思是当然你可以总是明确地检查 undefined ...但是如果你没有考虑 if(0) 可能需要一些时间来找出错误,因为它只对第一个值失败枚举。有什么想法/意见吗?
【问题讨论】:
-
一个好的测试套件可能会捕捉到这样的错误:)
-
您还可以为枚举分配默认值以外的值,以使它们不是 falsy
enum DoSomething { VALUE1 = 1543 }
标签: javascript typescript ecmascript-6 enums