J'essaie d'itérer sur les clés et les valeurs de l'objet mais TypeScript me crie dessus. Qu'est-ce que je fais mal?

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

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

J'obtiens une erreur TS ci-dessous

screenshot of typescript error

Qu'est-ce que je fais mal?

0
Eli Himself 18 juin 2020 à 11:21

4 réponses

Meilleure réponse

Convertissez simplement la chaîne renvoyée par Object.keys dans la clé de l'objet Data.

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

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

Lien Playground

3
Siraj Alam 18 juin 2020 à 08:34

Essayez d'itérer en utilisant Object.entries () https : //developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/entries

for(const [key,value] of Object.entries(DATA)){ // your code here }

-3
Raycas 18 juin 2020 à 08:25

Vous devez indiquer au typographie que les clés de votre objet sont de type string.

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

const result = Object.keys(DATA).map((d: string) => `${d} - ${DATA[d]}`)
0
theblackgigant 18 juin 2020 à 08:24

Les clés de l'objet elles-mêmes ne sont pas explicitement tapées comme des chaînes.

Quand tu fais

Object.keys(DATA)

Vous obtenez le nom, le prénom, le sexe comme valeurs à transmettre à la carte, pas John, Smith, Male.

Pour taper les clés également, vous devez taper l'objet comme ceci:

type DataType = {[key:string]: string }
const DATA:DataType = 
{
 name: "John",
 surname: "Smith",
 gender: "Male"
}
0
SJT 18 juin 2020 à 08:27