javascript - Typescript 不允许动态访问属性
问题描述
当我尝试在打字稿中访问我的对象属性时遇到一些问题:
const total = (type: string) => {
return {
status: 'Total',
test: data?[type].total,
};
};
total('first')
这是我的数据的样子:
data: {
first: {
total: 15
},
second: {
total: 515
}
}
试图访问我得到的属性TS2339: Property 'total' does not exist on type 'string[]'.
为什么我得到这个以及如何解决这个问题?
解决方案
您正在这里寻找可选的链接运算符并且
data?.[type]
是正确的语法。
如果只是尝试读取对象字段,TS 也会抛出错误object[property]
。它正确地假设不可能仅使用 any 读取对象属性string
,它需要更具体的类型。看看下面的代码。
interface Data {
first: {
total: number
},
second: {
total: number
}
}
const data: Data = {
first: {
total: 15
},
second: {
total: 515
}
}
const total = (type: keyof Data) => {
return {
status: 'Total',
test: data?.[type].total
}
}
total('first')
推荐阅读
- java - 如何使用 Java8 流在下面的数组列表中找到第二高的薪水
- javascript - TypeError:this.querySelectorAll 在 react js 中使用 D3Funnel 时不是函数
- mongodb - 在 MongoDB 中建模 RBAC 的最佳方法是什么:嵌入还是链接?
- python - 我不明白默认值如何在继承中起作用
- spring-boot - 无法调用“org.apache.commons.logging.Log.isDebugEnabled()”,因为“this.logger”为空
- python - 在某个计时器没有动作后,安全凸轮停止记录
- python - SessionNotCreatedException:消息:会话未创建:此版本的 ChromeDriver 仅支持使用 ChromeDriver 和 Chrome 的 Chrome 版本 87
- json - React 显示 json 键和值
- json - 如何查询数组字段(AWS Glue)?
- excel - Excel将浮点时间延迟格式化为字符串