export type Ok = T extends undefined ? { ok: true } : { ok: true; data: T }; export type Err = E extends undefined ? { ok: false } : { ok: false; error: E }; export type Result = Ok | Err; export const okResult = (data?: T): Ok => data === undefined ? ({ ok: true } as Ok) : ({ ok: true, data } as Ok); export const errResult = (error?: E): Err => error === undefined ? ({ ok: false } as Err) : ({ ok: false, error } as Err);