如下代码,x为Named类型,把y(多了location属性)赋值给x,这时Named类型虽然只有一个name属性但是x里是存了两个属性的。
但是用x['location']可以成功取出,用x.location则会报错,不是很理解这两种取值方式有什么不同导致这种情况?
interface Named {
name: string;
}
let x: Named;
// y's inferred type is { name: string; location: string; }
let y = { name: 'Alice', location: 'Seattle' };
x = y;
console.log('x[\'location\']', x['location']) // 成功输出
// console.log('x.location', x.location) // 报错 error TS2339: Property 'location' does not exist on type 'Named'.