TypeScript类型兼容性取值问题

发布时间 2023-07-14 16:01:48作者: Ccarrote

如下代码,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'.