如何引用键可以是任何字符串的对象的属性?
我希望编译器不要在最后一行抛出错误:
export type apple = { [x: string]: string }
export type pie = {
fruit: apple;
}
let myPie: pie = {
fruit: {
appleVariety: 'Granny Smith'
}
}
console.log(myPie.fruit.appleVariety);
答案 0 :(得分:2)
您要么拥有像您一样使用的可索引对象:
type apple = { [x: string]: string };
let a: apple = { appleVariety: 'Granny Smith' }
let variety = a['appleVariety'];
let something = a['something']; // no error even though it's undefined
或指定对象中的属性:
type apple = { appleVariety: string };
let a: apple = { appleVariety: 'Granny Smith' }
let variety = a.appleVariety;
let something = a.something; // Error: Property 'something' does not exist on type '{ appleVariety: string; }'.
你不能把两者混合在一起 这背后的理念是,如果你知道属性名称,那么明确地将它们包含在你的接口/类型定义中 但是如果你只是在一个对象中有一组属性,那么编译器就不会检查所使用的属性名,只检查类型。