type HasOwnPropertyFn = ( obj: TObject, key: PropertyKey ) => key is keyof TObject; // polyfill for Object.hasOwn const hasOwnProperty: HasOwnPropertyFn = (Object.hasOwn as HasOwnPropertyFn) || function hasOwnProperty(object: T, key: PropertyKey): key is keyof T { return Object.prototype.hasOwnProperty.call(object, key); }; export function getOwn(object: T, key: PropertyKey): T[keyof T] | undefined { return hasOwnProperty(object, key) ? object[key] : undefined; }