【发布时间】:2021-02-07 00:20:18
【问题描述】:
我正在尝试编写一个函数来返回对象中的值数组
let obj = {
a: 1,
b: 2,
c: 3,
}
const r = Object.keys(obj).map((key) => {
let val = obj[key]
return val
})
这里 TS 编译器显示错误提示
元素隐含地具有“任何”类型,因为类型的表达式 'string' 不能用于索引类型 '{ a: number; b:号码; C: 数字; }'。没有带有“字符串”类型参数的索引签名 在类型 '{ a: number; b:号码; c:号码; }'.ts(7053)
我无法解读它的含义,但我认为它与 key 是一个字符串有关。所以我尝试了这个
let obj = {
a: 1,
b: 2,
c: 3,
}
const r = Object.keys(obj).map((key) => {
let val = obj[key as keyof typeof obj] // the error now is gone
return val
})
console.log('r', r)
现在没有错误了。我不确定为什么。我所知道的是keyof 会产生obj 上允许的属性名称的类型,但我不知道typeof 在这里的用途
【问题讨论】:
标签: typescript