javascript - TypeScript 在迭代中获取对象值
问题描述
我需要访问我的对象的值。
目的:
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;
它说
“对象”类型上不存在属性“id”
有任何想法吗?
解决方案
发生这种情况是因为您懒惰地将过滤器键入为any
. 您可以通过为过滤器定义一个接口然后使用它来解决此问题:
interface Filter
{
focused: boolean;
options: boolean;
value: number | null; // TODO: type this
}
private filters: Record<string, Filter> = {
// ...
}
Record
类型在这里指定,对于 type 的每个键,属性string
的值都具有 type Filter
。
在这种特定情况下,您也可以只删除类型注释,编译器会发现过滤器对象的形状是相同的,并且每个过滤器都具有该value
属性。但是,如果没有使用不再是选项的对象文字创建过滤器。
推荐阅读
- c# - 取最后一个 VchNo 和按月分组并在实体框架中求和总金额
- microsoft-graph-api - 教育作业返回拒绝访问
- css - Vue动画重启
- tcp - 使用 netty TCP 的 JMS 侦听器
- expression - 使用 Azure 突触数据流表达式获取给定月份和年份的所有天数
- python - PyQt5 App:第三个小部件在运行时不显示,但在调试模式下可见(PyCharm)
- hadoop - Hadoop 3.2.1 多节点集群节点管理器未运行
- java - 如何在groovy中替换字符串中的方括号?
- c++ - 以 constexpr 方式设计类
- php - Symfony 4 RepeatedType 验证不起作用