mAssignDefaults
mAssignDefaults
(defaults: object) => (base: object) => base
Or(defaults: map) => (base: map) => base
- Assign a KeyedCollection over defaults.
Consider assignDefaults instead.
This is for the uncommon case where mutatingbase
is required.const ab = { a: 1, b: 2 } const assignDefaultsAB = mAssignDefaults(ab) const obj = { a: 2, c: 3 } const mutatedObj = assignDefaultsAB(obj) console.log(mutatedObj === obj) // is true console.log(obj) // is { a: 2, c: 3, b: 2 }
type ABC = { a: number b: number c: number } const ab = { a: 1, b: 2 } const assignDefaultsAB = mAssignDefaults(ab) const obj = { a: 2, c: 3 } as ABC const mutatedObj = assignDefaultsAB(obj) console.log(mutatedObj === obj) // is true console.log(obj) // is { a: 2, c: 3, b: 2 }
const ab = { a: 1, b: 2 } const assignDefaultsAB = mAssignDefaults(ab) const obj = { a: 2, c: 3 } const mutatedObj = assignDefaultsAB(obj) console.log(mutatedObj === obj) // is true console.log(obj) // is { a: 2, c: 3, b: 2 }
type ABC = { a: number b: number c: number } const ab = { a: 1, b: 2 } const assignDefaultsAB = mAssignDefaults(ab) const obj = { a: 2, c: 3 } as ABC const mutatedObj = assignDefaultsAB(obj) console.log(mutatedObj === obj) // is true console.log(obj) // is { a: 2, c: 3, b: 2 }
Sometimes we want to mutate a collection by assigning defaults. Below, we have a list of wedding dinner orders. By default they're served chicken and rice, but they can choose tofu or a salad. Let's get the final orders for the wedding.
const defaultDinner = { side: 'rice', main: 'chicken', } const orders = { emma: { side: 'salad', main: 'tofu', }, meg: { side: 'salad', }, tom: {}, } const assignDefaultDinner = mAssignDefaults(defaultDinner) const assignDinners = forEach(assignDefaultDinner) assignDinners(orders) console.log(orders) // is { // emma: { // side: salad // main: tofu // } // meg: { // side: salad // main: chicken // } // tom: { // side: rice // main: chicken // } // }
type Dinner = { side: 'rice' | 'salad' main: 'chicken' | 'tofu' } const defaultDinner: Dinner = { side: 'rice', main: 'chicken', } type Orders = Record<string, Dinner> const orders: Orders = { emma: { side: 'salad', main: 'tofu', }, meg: { side: 'salad', } as Dinner, tom: {} as Dinner, } const assignDefaultDinner = mAssignDefaults(defaultDinner) const assignDinners = forEach(assignDefaultDinner)<Orders> assignDinners(orders) console.log(orders) // is { // emma: { // side: salad // main: tofu // } // meg: { // side: salad // main: chicken // } // tom: { // side: rice // main: chicken // } // }
const defaultDinner = { side: 'rice', main: 'chicken', } const orders = { emma: { side: 'salad', main: 'tofu', }, meg: { side: 'salad', }, tom: {}, } const assignDefaultDinner = mAssignDefaults( defaultDinner ) const assignDinners = forEach(assignDefaultDinner) assignDinners(orders) console.log(orders) // is { // emma: { // side: salad // main: tofu // } // meg: { // side: salad // main: chicken // } // tom: { // side: rice // main: chicken // } // }
type Dinner = { side: 'rice' | 'salad' main: 'chicken' | 'tofu' } const defaultDinner: Dinner = { side: 'rice', main: 'chicken', } type Orders = Record<string, Dinner> const orders: Orders = { emma: { side: 'salad', main: 'tofu', }, meg: { side: 'salad', } as Dinner, tom: {} as Dinner, } const assignDefaultDinner = mAssignDefaults( defaultDinner ) const assignDinners = forEach( assignDefaultDinner )<Orders> assignDinners(orders) console.log(orders) // is { // emma: { // side: salad // main: tofu // } // meg: { // side: salad // main: chicken // } // tom: { // side: rice // main: chicken // } // }