From 965912076aa6b8303e54149c41df7f82ca130d8a Mon Sep 17 00:00:00 2001 From: Matthew Pietz Date: Mon, 16 Sep 2024 18:53:32 -0700 Subject: [PATCH] Enhance `diff()` type Return a stronger representation of the return value of `diff()`. --- index.d.ts | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/index.d.ts b/index.d.ts index 2fea20a..4b22e44 100644 --- a/index.d.ts +++ b/index.d.ts @@ -1,4 +1,23 @@ -export function diff (originalObj: object, updatedObj: object): object +type NonTraverse = + | Date + | Function + | RegExp + | boolean + | number + | string + | symbol +export type DeepDiff = T extends NonTraverse + ? T + : T extends (infer U)[] + ? { [x: number]: U | undefined } + : T extends Record + ? { [K in U]?: DeepDiff } + : never + +export function diff< + T extends Record, + U extends Record, +>(originalObj: T, updatedObj: U): DeepDiff export function addedDiff (originalObj: object, updatedObj: object): object