以下代码在Visual Studio代码中运行良好:
type MyType = {
id: number;
name: string;
};
type MyTypes = { [name: string]: MyType };
const MY_TYPES:MyTypes = {
ONE: { id: 0, name: 'name0' },
TWO: { id: 1, name: 'name1' }
};
console.log(MY_TYPES.ONE); //Intellisense error
console.log(MY_TYPES['ONE']);
两个日志语句都编译并输出相同的内容,但第一个在VS代码中生成错误,并且“类型”上的“属性'ONE'不存在。有没有其他方法可以构建我的代码,以便VS代码可以自动推断/自动完成MY_TYPES的属性名称为ONE和TWO?
答案 0 :(得分:0)
如果您使用indexed object,则只能使用索引访问属性:
type MyTypes = { [name: string]: MyType };
console.log(MY_TYPES["ONE"]);
那是因为编译器只知道该对象具有string类型的键,它不知道特定的键。
如果您希望能够使用点表示法访问属性,则需要执行以下操作:
type MyTypes = {
ONE: MyType;
TWO: MyType;
}
console.log(MY_TYPES.ONE);
然而,您可以这样做:
type MyTypes = {
ONE: MyType;
TWO: MyType;
}
const MY_TYPES = {
ONE: { id: 0, name: 'name0' },
TWO: { id: 1, name: 'name1' }
};
编译器将推断出MY_TYPES
的类型。