let d: { id: number };
d = { id: 2, name: 'archer' }; // compilation error
let e: { id: number };
let e1 = { id: 2, name: 'archer' };
e = e1; // okay
结论
TypeScript 在将一个变量分配给另一个变量时似乎不会检查兼容性,但在将对象文字分配给变量时会检查兼容性。
另外,我对情况2感到困惑,因为根据手册,类型检查器只会根据形状进行类型检查。