Nullcheck Детская цепочка в машинописи

Использование строгой проверки нуля - это замечательно, но это также приводит к такой глупости:

if (x)
  if (x.y)
    if (x.y.z)
      if (x.y.z.stringProperty)
        console.log(x.y.z.stringProperty)

Есть ли способ сделать эту нулевую проверку без повторения?

Спасибо!

1 ответ

Решение

Распространенным способом работы с такими сценариями является использование такой абстракции, как Maybe (иногда называется Option). Пример использования:

import { Option } from 'space-lift';

Option(input)
  .map(input => input.x)
  .map(x => x.y)
  .map(y => y.z)
  .map(z => z.stringProperty)
  .forEach(console.log);

В качестве альтернативы можно использовать что-то более сжатое, например dlv,

console.log(dlv(input, ['x.y.z.stringProperty']) as string);

Хотя это может выглядеть более привлекательно из-за своей компактности, это решение никогда не может быть безопасным для типов. Путь, выраженный в виде строки, не может быть проверен по фактической структуре вашего input Отсюда и утверждение типа.

Другие вопросы по тегам