[英]Iterate over object's keys and values in TypeScript
在普通的 JavaScript 中,我们可以迭代 object 道具和值,如下所示:
const values = Object.keys(obj).map(key => obj[key]);
在 TypeScript 中,此语法错误,因为 TS 编译器显示以下消息:
“元素隐式具有‘任何’类型,因为‘字符串’类型的表达式不能用于索引对象类型”。
是否有另一种方法不使用 Map<string, T> 来执行此操作并获取每个键的值? 我在使用 React 和 TS 构建应用程序时遇到了这个问题,我在 state 中有一个 object,我需要这样做:
const stateJSX: HTMLParagraphElement[] = Object.keys(obj).map(key => <p>`${key}: ${obj[key]}`<p>);
我想看看其他人的方法和想法:)谢谢。
使用Object.entries
遍历键和值:
Object.entries(obj).map(([key, value]) => `${key}: ${value}`)
使用 'Object.entries' Object.entries(obj).forEach(([key, value]) => console.log( ${key}: ${value}
))
您可以在keyof
运算符的帮助下轻松使用它:
const test = <T extends Record<string, unknown>>(obj: T) => {
return (Object.keys(obj) as Array<keyof T>).map(key => obj[key])
}
您应该确保 TS,该key
变量可以用作obj
参数的索引
Object.keys()
要使用Object.keys()
,(如原始问题所示),您可以添加一个类型转换,指示 object 是可索引类型:
for (const key of Object.keys(obj)) {
console.log(`${key}: ${(obj as {[key: string]: string})[key]}`);
}
或者在key
上使用类型转换:
for (const key of Object.keys(obj)) {
console.log(`${key}: ${obj[key as keyof typeof obj]}`);
}
Object.entries()
Object.entries()
可以在没有map()
的情况下使用,如下所示:
for (const [key, value] of Object.entries(obj)) {
console.log(`${key}: ${value}`);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.