使用Typescript推断密钥名称

时间:2016-12-06 20:31:45

标签: typescript intellisense

以下代码在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?

1 个答案:

答案 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的类型。