Property chaining
by plantface
TypeScript
function val<T>(valueSupplier: () => T): T {
try { return valueSupplier(); } catch (err) { return undefined; }
}
let obj1: { a?: { b?: string }} = { a: { b: 'c' } };
console.log(val(() => return obj1.a.b) || 'Nothing'); // 'c'
obj1 = { a: {} };
console.log(val(() => return obj1.a.b)); // undefined
console.log(val(() => return obj1.a.b) || 'Nothing'); // 'Nothing'
obj1 = {};
console.log(val(() => return obj1.a.b) || 'Nothing'); // 'Nothing'
obj1 = null;
console.log(val(() => return obj1.a.b) || 'Nothing'); // 'Nothing'