Why does call B fail excess-property checking while call A passes, despite both objects having the same shape?
interface Opts { a: number; b?: number }
function f(o: Opts) {}
const raw = { a: 1, x: 9 };
f(raw); // A
f({ a: 1, x: 9 }); // B