type ValueOrArray = undefined | string | number | T | Array> type SortObject = ValueOrArray> /** * Recursively sorts object keys alphabetically */ export function sortObjectKeys(x: SortObject): SortObject { if (typeof x !== 'object' || !x) { return x } if (Array.isArray(x)) { return x.map(sortObjectKeys) } return Object.keys(x) .sort() .reduce((o, k) => ({ ...o, [k]: sortObjectKeys(x[k]) }), {}) }