我遇到以下打字稿问题:
编写一个确定用户是否已登录的函数。有时,它会以用户登录的次数被调用。有时,它会以true调用。从来没有用false
来调用
到目前为止,我的代码:
function isLoggedIn(param: number | boolean ) {
if (param === 0) {
return false
} else if (param === false) {
return false
} else {
return true
}
}
当用false调用函数时,我不知道如何处理这种情况,因此可能会返回类型错误。如果我做:
if (param === false) {return false}
,我得到一个错误
预期:类型错误,但得到:false
如果我自己抛出TypeError,即if (arg === false) throw new TypeError('type error')
我返回错误“ 预期:类型错误,但得到:TypeError:'类型错误'
有人知道如何使该功能正常工作吗?
答案 0 :(得分:1)
我想问题中提到的Type error
不是JS TypeError
,而是编译时的TypeScript类型错误,所以类似:
'false'类型的参数不能分配给'number |类型的参数。真的”。(2345)
您可以将声明更改为:
function isLoggedIn(param: number | true) {
if (param === 0) {
return false
} else {
return true
}
}
请参见number | true
。这里的true
代表 literal “ true”值,而不仅仅是布尔值,因此您可以传递“ true”,但不能传递“ false”。
您也应该在内部修改if
条件,因为如示例中所述,param永远不会是false
。所以您可以像这样使用它:
isLoggedIn(10); // ok
isLoggedIn(true); // ok
isLoggedIn(false); // TS Error
您可以在此处进行检查:Playground Link