Как сделать проверку встроенного свойства, чтобы вернуть логическое значение? - PullRequest
0 голосов
/ 18 января 2019

У меня есть функция:

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

Я предположил, что возвращаемое значение этой функции - логическое значение (как мне подсказывает WebStorm ). Но компилятор TypeScript жалуется на возвращаемое значение ether undefined | string.

Мой вопрос

Как написать правильную встроенную проверку свойства в TypeScript, которая действительно в любом случае возвращает логическое значение?

Я мог бы написать:

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

Но некоторым людям это кажется немного неудобным.

Ответы [ 3 ]

0 голосов
/ 18 января 2019

Оператор && не является неявным образом приведенным к логическому значению. Что на самом деле происходит:

A && B && C
// if A is falsy return A
// else return B && C
//      if B is falsy return B
//      else return C

в вашем случае у вас есть три возможности:

  1. объект не определен -> возвращает значение не определено
  2. объект задан, но someProperty не определен -> возвращает неопределенный
  3. obj определен и someProperty определен -> возвращает некоторое свойство (в данном случае строка)
0 голосов
/ 18 января 2019

Вы можете использовать это решение:

function test(obj?: { someProperty: string}) {
  return obj && obj.someProperty && true || false;
}
0 голосов
/ 18 января 2019

Вы можете обернуть ваше возвращаемое значение в логическое :

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

JSFiddle: https://jsfiddle.net/oq4jr518/

...