如何使内联属性检查返回布尔值?

时间:2019-01-18 10:39:30

标签: javascript typescript webstorm

我有一个功能:

function test(obj?: { someProperty: string}) {
  return obj && obj.someProperty;
}

我的假设是,此函数的返回值为布尔值(如 WebStorm 告诉我的那样)。但是 TypeScript 编译器抱怨返回值是以太undefined | string

我的问题

如何在TypeScript中编写适当的内联属性检查,无论如何,该检查实际上都会返回布尔值?

我可以写:

function test(obj?: { someProperty: string}) {
  return !!(obj && obj.someProperty);
}

但是对于某些人来说,这似乎有点不舒服。

3 个答案:

答案 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

在您的情况下,您有三种可能:

  1. 未定义obj->返回未定义
  2. 已定义obj,但未定义someProperty->返回未定义
  3. 定义
  4. obj并定义someProperty->返回一些属性(在这种情况下为字符串)