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
Отсюда и утверждение типа.