找出 Invoice 谓词里的 bug

来自 类型收窄
TypeScript 6 进阶 5分钟 找出 2处问题

找出这个谓词为何会放行一个让 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)}`;
}
在试验场中打开
报告错误