TypeScript 在迭代中获取对象值
TypeScript getting object value in iteration
我需要访问我的对象的值。
对象:
private filters: any = {
id: {
focused: false,
options: true,
value: null,
},
user_name: {
focused: false,
options: true,
value: null,
}
}
我像这样遍历它们:
for (const [key, filter] of Object.entries(this.filters)) {
console.log(key);
console.log(filter.value);
}
问题是我无法访问 filter.value,因为“对象的类型未知”。我试图将对象类型设置为对象而不是任何。但在那之后我无法达到这样的过滤器对象值:
this.filters.id.value = value;
它说
Property 'id' does not exist on type 'object'
有什么想法吗?
发生这种情况是因为您懒惰地将过滤器键入 any
。您可以通过为过滤器定义接口然后使用它来解决此问题:
interface Filter
{
focused: boolean;
options: boolean;
value: number | null; // TODO: type this
}
private filters: Record<string, Filter> = {
// ...
}
Record
类型在此处指定对于每个类型为 string
的键,属性 的值的类型为 Filter
.
在这种特定情况下,您也可以只删除类型注释,编译器会发现过滤器对象的形状是相同的,并且每个过滤器都有 value
属性。但是,如果过滤器不是使用对象文字创建的,那将不再是一个选项。
我需要访问我的对象的值。
对象:
private filters: any = {
id: {
focused: false,
options: true,
value: null,
},
user_name: {
focused: false,
options: true,
value: null,
}
}
我像这样遍历它们:
for (const [key, filter] of Object.entries(this.filters)) {
console.log(key);
console.log(filter.value);
}
问题是我无法访问 filter.value,因为“对象的类型未知”。我试图将对象类型设置为对象而不是任何。但在那之后我无法达到这样的过滤器对象值:
this.filters.id.value = value;
它说
Property 'id' does not exist on type 'object'
有什么想法吗?
发生这种情况是因为您懒惰地将过滤器键入 any
。您可以通过为过滤器定义接口然后使用它来解决此问题:
interface Filter
{
focused: boolean;
options: boolean;
value: number | null; // TODO: type this
}
private filters: Record<string, Filter> = {
// ...
}
Record
类型在此处指定对于每个类型为 string
的键,属性 的值的类型为 Filter
.
在这种特定情况下,您也可以只删除类型注释,编译器会发现过滤器对象的形状是相同的,并且每个过滤器都有 value
属性。但是,如果过滤器不是使用对象文字创建的,那将不再是一个选项。