使用 Typescript 推断键名
Inferring key names with Typescript
以下代码在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 Code 中生成错误并声明“属性 'ONE' 在类型上不存在”。我有没有其他方法来构建我的代码,以便 VS Code 可以自动 infer/autocomplete MY_TYPES 有 属性 个名字和两个?
如果您使用 indexed object,那么您只能使用索引访问属性:
type MyTypes = { [name: string]: MyType };
console.log(MY_TYPES["ONE"]);
那是因为编译器只知道对象有字符串类型的键,不知道具体的键。
如果您希望能够使用点表示法访问属性,那么您需要这样做:
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
的类型。
以下代码在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 Code 中生成错误并声明“属性 'ONE' 在类型上不存在”。我有没有其他方法来构建我的代码,以便 VS Code 可以自动 infer/autocomplete MY_TYPES 有 属性 个名字和两个?
如果您使用 indexed object,那么您只能使用索引访问属性:
type MyTypes = { [name: string]: MyType };
console.log(MY_TYPES["ONE"]);
那是因为编译器只知道对象有字符串类型的键,不知道具体的键。
如果您希望能够使用点表示法访问属性,那么您需要这样做:
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
的类型。