/
addProp.ts
53 lines (49 loc) · 1.22 KB
/
addProp.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
import { purry } from "./purry";
/**
* Add a new property to an object.
*
* @param obj - The target object.
* @param prop - The property name.
* @param value - The property value.
* @signature
* R.addProp(obj, prop, value)
* @example
* R.addProp({firstName: 'john'}, 'lastName', 'doe') // => {firstName: 'john', lastName: 'doe'}
* @dataFirst
* @category Object
*/
export function addProp<
T extends Record<PropertyKey, unknown>,
K extends string,
V,
>(obj: T, prop: K, value: V): T & { [x in K]: V };
/**
* Add a new property to an object.
*
* @param prop - The property name.
* @param value - The property value.
* @signature
* R.addProp(prop, value)(obj)
* @example
* R.addProp('lastName', 'doe')({firstName: 'john'}) // => {firstName: 'john', lastName: 'doe'}
* @dataLast
* @category Object
*/
export function addProp<
T extends Record<PropertyKey, unknown>,
K extends string,
V,
>(prop: K, value: V): (obj: T) => T & { [x in K]: V };
export function addProp(): unknown {
return purry(_addProp, arguments);
}
function _addProp<T extends Record<PropertyKey, unknown>, K extends string, V>(
obj: T,
prop: K,
value: V,
): T & { [x in K]: V } {
return {
...obj,
[prop]: value,
};
}