Javascript 在迭代中获取对象值的TypeScript

Javascript 在迭代中获取对象值的TypeScript,javascript,typescript,types,strict,Javascript,Typescript,Types,Strict,我需要访问对象的值 对象: private filters: any = { id: { focused: false, options: true, value: null, }, user_name: { focused: false, options: true, value: null,

我需要访问对象的值

对象:

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);
}
this.filters.id.value = value;
问题是我无法访问filter.value,因为“对象的类型为unnown”。我尝试将对象类型设置为object而不是any。但在这之后,我无法达到过滤器对象值,如下所示:

for (const [key, filter] of Object.entries(this.filters)) {
    console.log(key);
    console.log(filter.value);
}
this.filters.id.value = value;
上面说

类型“object”上不存在属性“id”


有什么想法吗?

这是因为您懒洋洋地将过滤器键入了
Any
。您可以通过为过滤器定义一个接口,然后使用该接口来解决此问题:

interface Filter
{
    focused: boolean;
    options: boolean;
    value: number | null; // TODO: type this
}
专用筛选器:记录={
// ...
}
记录
类型在此指定,对于
字符串
类型的每个键,属性的值都具有type
过滤器


在这种特定情况下,您也可以删除类型注释,编译器将发现过滤器对象的形状是相同的,并且每个过滤器都具有
属性。如果过滤器不是使用不再是选项的对象文字创建的。

太好了,记录对我来说是新的东西。它可以工作。@The50:It是一个,您可以手动编写它作为
{[key:string]:Filter}
。我可以把它放在哪里?在我的界面内?@The50:No,这将替换
记录
。没有必要;我只是在解释
Record
是如何在内部工作的。如果您将IDE与
一起使用,则转到definition
,您也可以跳到那里亲自查看。