# JavaScript and TypeScript Notes The following is a type definition for a conversion roundtrip from obj to json to obj.\ @see {@link https://effectivetypescript.com/2020/04/09/jsonify/} ```ts // export type JsonifySimple = T extends { toJSON(): infer U } // ? U // : T extends object // ? { [k in keyof T]: Jsonify } // : T; export type Jsonify = T extends { toJSON: (...args: any) => infer R } ? Jsonify : T extends Array ? Array> : T extends (...args: any) => any ? never : T extends object ? { [K in keyof T]: K extends string | number ? Jsonify : never } : T; ``` --- Get the single type of an array type e.g: User[] -> User ```ts type GetElementType = T extends (infer U)[] ? U : never; ```