我正在使用Typescript,并对编译器如何为这两个函数推断不同的返回类型感到困惑。
//this is of type () => boolean | ""
const isFormValid = () => {
return jobTitle && jobTitle!=''
}
//this is of type () => boolean
const isFormInvalid = () => {
return !jobTitle || jobTitle===''
}
是的,jobTitle
是一个字符串,但是这两个字符串的返回类型不都应该是() => boolean
吗?
3条答案
按热度按时间ecbunoof1#
a && b
返回a
,如果它是“falsy”。0
、null
、undefined
和空字符串都是“falsy”。cpjpxq1n2#
如果你想要boolean作为返回值,使用double
!
:oxosxuxt3#
这是预期的行为。为了解释,让我们从
||
运算符开始。||
如果左边的值为false,则取右边的值。""
也被认为是一个假值:对于
&&
,如果它是假的,则分配左边的值,否则分配右边的值:由于
jobTitle
是string
,因此它也可以是""
,编译器推断出两个可能的返回值:1.当
jobTitle
为""
时:""
1.当
jobTitle
不是""
时:jobTitle === ''
boolean