Вы можете создать Proxy, который будет возвращать пустой объект {}, когда свойство не определено.Что-то вроде оператора Элвиса в TypeScript.
function safe(obj) {
return new Proxy(obj, {
get: function(target, name) {
const result = target[name];
if (!!result) {
return (result instanceof Object)? safe(result) : result;
}
return safe({});
}
});
}
Пример использования:
const jane = {
name: 'Jane',
age: 35
};
const john = {
name: 'John',
address: {
street: '7th Avenue',
city: 'Ecmaville',
zipCode: '23233'
},
sister: jane,
age: 28
};
var sjohn = safe(john);
console.log(sjohn.name); // --> "John"
console.log(sjohn.address.street); // --> "7th Avenue"
console.log(sjohn.sister.name); // --> "Jane"
console.log(sjohn.sister.address); // --> {}
console.log(sjohn.sister.address.street); // --> {}