const model = { normalKey: 1, coRRupTkey: 2, innErKey: { x: 3, Y: 4 }, aRR: [ { first: 5 } ] } function getModel(model) { return new Proxy(model, { get(obj, prop) { if (prop in obj) return obj[prop] const lowerProp = prop.toLowerCase() const ownProp = Object.keys(model).find(k => k.toLowerCase() === lowerProp) const value = obj[ownProp] return value instanceof Object ? getModel(value) : value } }) } const wrapped = getModel(model) console.log(wrapped.corruptKey) console.log(wrapped.innerKey.x) console.log(wrapped.innerKey.y) console.log(wrapped.arr.map(x => x.FIRSt))