From 74367f89351c3ae15f6e501f98c3446da0987561 Mon Sep 17 00:00:00 2001 From: Mohamed Khelif Date: Tue, 12 Apr 2022 13:45:28 -0400 Subject: [PATCH] Stronger typescript support for diff `deep-object-diff` will now type the return type based off of the two objects passed in. ``` const result = diff( { some: "value", deep: { nested: { property: "value", array: [1, 2, 3], }, }, }, { some: "value", other: 1 } ); result.deep.nested.property; // $ExpectType string result.some; // $ExpectType string result.other; // $ExpectType number result.deep.nested.array; // $ExpectType number[] ``` --- index.d.ts | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/index.d.ts b/index.d.ts index e848bff..291c4d0 100644 --- a/index.d.ts +++ b/index.d.ts @@ -1,9 +1,19 @@ -export function diff (originalObj: object, updatedObj: object): object +type DeepPartial = T extends object ? { + [P in keyof T]?: DeepPartial; +} : T; -export function addedDiff (originalObj: object, updatedObj: object): object +export function diff (originalObj: T, updatedObj: J): DeepPartial -export function deletedDiff (originalObj: object, updatedObj: object): object +export function addedDiff (originalObj: T, updatedObj: J): DeepPartial -export function updatedDiff (originalObj: object, updatedObj: object): object +export function deletedDiff (originalObj: T, updatedObj: J): DeepPartial -export function detailedDiff (originalObj: object, updatedObj: object): object +export function updatedDiff (originalObj: T, updatedObj: J): DeepPartial + +export interface DetailedDiff { + added: DeepPartial + deleted: DeepPartial + updated: DeepPartial +} + +export function detailedDiff (originalObj: T, updatedObj: J): DetailedDiff