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 属性。但是,如果过滤器不是使用对象文字创建的,那将不再是一个选项。