TypeScript映射到对象的键和值

时间:2020-06-18 08:21:42

标签: javascript typescript

我正在尝试遍历对象的键和值,但是TypeScript在向我喊叫。我在做什么错了?

const DATA = {
  name: "John",
  surname: "Smith",
  gender: "Male"
}

const result = Object.keys(DATA).map((d: string) => `${d} - ${DATA[d]}`)

我在下面收到TS错误

screenshot of typescript error

我在做什么错了?

3 个答案:

答案 0 :(得分:3)

只需将Object.keys返回的字符串转换为Data对象的键即可。

const DATA = {
  name: "John",
  surname: "Smith",
  gender: "Male"
}

const result = Object.keys(DATA).map((d: string) => `${d} - ${DATA[d as keyof typeof DATA]}`)

Playground Link

答案 1 :(得分:1)

您需要告诉打字稿您对象的键是字符串类型。

const DATA: {[key: string]: string} = {
  name: "John",
  surname: "Smith",
  gender: "Male"
}

const result = Object.keys(DATA).map((d: string) => `${d} - ${DATA[d]}`)

答案 2 :(得分:0)

对象的键本身未明确键入为字符串。

这样做的时候

Object.keys(DATA)

您正在获取姓名,姓氏,性别作为要传递到地图的值,而不是约翰,史密斯,男。

要同时键入键,您需要输入以下对象:

type DataType = {[key:string]: string }
const DATA:DataType = 
{
 name: "John",
 surname: "Smith",
 gender: "Male"
}