给定一个可能为 null 且可能具有以下属性的对象:
{
templateId: "template1",
templates: {
template1: "hello"
}
}
您将如何以故障安全的方式获取模板?(可能没有定义templateId,或者它引用的模板可能未定义)
我使用 ramda 并试图调整我的原始代码版本以使用可能的 adt 之类的东西来避免显式的 null/undefined 检查。
我没有想出一个优雅而干净的解决方案。
天真的 ramda 版本:
const getTemplate = obj => {
const templateId = obj && prop("templateId", obj);
const template = templateId != null && path(["template", templateId], obj);
return template;
}
这确实有效,但我想避免空检查,因为我的代码还有很多事情要做,变得更干净真的很好
编辑 我从几个答案中得到最好的答案是首先确保数据干净。但这并不总是可能的。我也想出了这个,我很喜欢。
const Empty=Symbol("Empty");
const p = R.propOr(Empty);
const getTemplate = R.converge(p,[p("templateId"), p("templates")]);
希望获得有关它的干净程度和可读性的反馈(以及是否存在会破坏它的边缘情况)