我有一个功能:
function test(obj?: { someProperty: string}) {
return obj && obj.someProperty;
}
我的假设是,此函数的返回值为布尔值(如 WebStorm 告诉我的那样)。但是 TypeScript 编译器抱怨返回值是以太undefined | string
。
我的问题
如何在TypeScript中编写适当的内联属性检查,无论如何,该检查实际上都会返回布尔值?
我可以写:
function test(obj?: { someProperty: string}) {
return !!(obj && obj.someProperty);
}
但是对于某些人来说,这似乎有点不舒服。
答案 0 :(得分:1)
您可以使用以下解决方案:
function test(obj?: { someProperty: string}) {
return obj && obj.someProperty && true || false;
}
答案 1 :(得分:0)
您可以将返回值包装到boolean:
function test(obj?: { someProperty: string}) {
return Boolean(obj && obj.someProperty);
}
JSFiddle:https://jsfiddle.net/oq4jr518/
答案 2 :(得分:0)
&&
运算符不会隐式转换为布尔值。实际发生的情况:
A && B && C
// if A is falsy return A
// else return B && C
// if B is falsy return B
// else return C
在您的情况下,您有三种可能:
someProperty
->返回未定义someProperty
->返回一些属性(在这种情况下为字符串)