Find why this predicate can approve a value that crashes in formatInvoice.
TypeScript
type Invoice = { id: string; total: number };
function isInvoice(value: unknown): value is Invoice {
return (
typeof value === "object" &&
value !== null &&
"id" in value
);
}
function formatInvoice(value: unknown): string {
if (!isInvoice(value)) return "invalid";
return `${value.id}:${value.total.toFixed(2)}`;
}