// Created on savesnippets.com · https://savesnippets.com/vG53w5x4x83qFI type ParseResult = | { ok: true; value: T } | { ok: false; error: SyntaxError }; export function safeJsonParse(text: string): ParseResult { try { return { ok: true, value: JSON.parse(text) as T }; } catch (e) { return { ok: false, error: e as SyntaxError }; } } const r = safeJsonParse<{ id: number }>('{"id":42}'); if (r.ok) { console.log(r.value.id); // narrowed → { id: number } } else { console.error(r.error.message); // narrowed → SyntaxError }