Чтобы избежать ошибки при доступе к глубоко вложенным свойствам, я написал функцию возврата прокси:
const safe_access = obj =>
new Proxy(obj, {
get: (o, k) =>
o[k] == null
? safe_access({})
: typeof o[k] === 'object'
? safe_access(o[k])
: o[k] });
Вот пример:
const a = safe_access({});
a.x.y.z; // no TypeError ????
Однако в своей текущей форме safe_access
не может сказать, когда он достиг конца пути. Это означает, что он не может вернуть undefined
, чтобы показать, что свойство действительно не существует. Это также означает, что у вас не может быть значений по умолчанию:
const a = safe_access({});
a.x.y.z || 42; // not 42
const {x: {y: {z = 42}}} = a;
z; // not 42
Как мой прокси-объект может обнаружить конец поиска свойства?