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'