benjamine / jsondiffpatch

Diff & patch JavaScript objects
MIT License
4.77k stars 464 forks source link

`Delta` type is too wide #368

Open samhh opened 3 months ago

samhh commented 3 months ago

Between 0.5 and 0.6 the Delta type returned by diff changed. It used to be:

export interface Delta {
    [key: string]: any;
    [key: number]: any;
}

Now it's:

export type Delta = AddedDelta | ModifiedDelta | DeletedDelta | ObjectDelta | ArrayDelta | MovedDelta | TextDiffDelta | undefined;

Where many of those are typed partially with unknown.

This is undoubtedly an improvement, however I wonder if we could narrow unknown down at all?

My use case is trying to work with JSON safely , for example via fp-ts' Json type: https://github.com/gcanti/fp-ts/blob/2.16.5/src/Json.ts#L10.

export type Json = boolean | number | string | null | JsonArray | JsonRecord

This enables infallible stringification.

I suspect Delta is already implicitly a subtype of Json, however if not it'd be good to know that. Cheers!