Skip to content

Instantly share code, notes, and snippets.

View jeremyhewett's full-sized avatar

Jeremy Hewett jeremyhewett

View GitHub Profile
@jeremyhewett
jeremyhewett / Deserialized.d.ts
Last active January 27, 2026 02:12
A Typescript generic to describe any object (or primitive) that has gone through JSON serialization and deserialization. Using JSON.stringify to serialize an object and then using JSON.parse to deserialize it will produce a result that can differ from the original in many ways. For instance, any function properties will be removed, any Date prop…
type Deserialized<T> =
unknown extends T ? unknown :
T extends JSONPrimitive ? T :
T extends { toJSON: () => infer R } ? Deserialized<R> :
T extends Array<infer U> ? Deserialized<U>[] :
T extends object ? DeserializedObject<T> :
never;
type DeserializedObject<T extends object> = {
[K in keyof T as T[K] extends NotAssignableToJson ? never : K]: Deserialized<T[K]>;