forked from mattphillips/deep-object-diff
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathindex.d.ts
44 lines (36 loc) · 1.01 KB
/
index.d.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
type Primitive = string | number | boolean | null | undefined;
export type Diff<T> = T extends Primitive
? T
: T extends Array<infer U>
? { [key: string]: Diff<U> }
: { [P in keyof T]?: Diff<T[P]> };
export type DiffRemovable<T> = T extends Primitive
? T
: T extends Array<infer U>
? { [key: string]: DiffRemovable<U | undefined> }
: { [P in keyof T]?: DiffRemovable<T[P]> };
export function diff<T extends object>(
originalObj: T,
updatedObj: T,
): DiffRemovable<T>;
export function addedDiff<T extends object>(
originalObj: T,
updatedObj: T,
): Diff<T>;
export function deletedDiff<T extends object>(
originalObj: T,
updatedObj: T,
): DiffRemovable<T>;
export function updatedDiff<T extends object>(
originalObj: T,
updatedObj: T,
): Diff<T>;
export type DetailedDiff<T> = {
added: Diff<T>;
deleted: DiffRemovable<T>;
updated: Diff<T>;
};
export function detailedDiff<T extends object>(
originalObj: T,
updatedObj: T,
): DetailedDiff<T>;