0

我想问一下为什么编译器不让我使用回调函数,forEach尽管据我所知"a" | "b" | "c" | "d"string. 请查看代码块后的错误消息。Record我想我可以用一种类型来解决这个问题,对吗?谢谢!

const obj = { a: 10, b: 20, c: 30, d: 40 }
type O = typeof obj

Object.keys(obj).forEach((value: keyof O) => {
  console.log(value)
})

错误 TS2345:类型参数 '(value: "a" | "b" | "c" | "d") => void' 不可分配给类型参数 '(value: string, index: number, array: string []) => 无效'。
参数 'value' 和 'value' 的类型不兼容。
类型 'string' 不可分配给类型 '"a" | "b" | "c" | “d”'。

4

1 回答 1

1

我设法让它与它一起工作:

(Object.keys(obj) as (keyof O)[]).forEach((value: keyof O) => {
  console.log(value)
})

问题源于,无论如何Object.keys都会返回 a 。string[]

但是,使用这种方法并不安全。当我对此进行测试时,编译器无法确定obj实际上是否有符合keyof O

于 2020-01-29T15:15:42.477 回答