103 votes

La propriété 'entrées' n'existe pas sur le type 'ObjectConstructor'

Je suis en train de travailler sur un ng2 mise en œuvre. Je suis l'aide de l'appel de fonction suivant pour convertir un objet d'un tableau:

var authors = Object.entries(responseObject.Authors);

C'est un standard js fonction. Cependant, le ts compilateur renvoie l'erreur suivante:

"Property 'entries' does not exist on type 'ObjectConstructor'"

Basé sur un rapide de google, il semble que la solution pourrait être de modifier le compilerOptions propriété target de es5 à l'es6. Cependant, après quelques recherches précédentes d'une précédente question, je pensais que j'ai été en mesure de tirer parti de es6 de fonctionnalités, y compris les "lib" bien sur mon tsconfig.json ci-dessous:

  "compilerOptions": {
    "emitDecoratorMetadata": true,
    "experimentalDecorators": true,
    "module": "commonjs",
    "noEmitOnError": true,
    "noImplicitAny": false,
    "outDir": "../Scripts/",
    "removeComments": false,
    "sourceMap": true,
    "target": "es5",
    "moduleResolution": "node",
    "lib": [
      "es2015",
      "dom"
    ]
  }

J'ai aussi essayé de changer la propriété target es2015 puis reconstruit le projet et exécuté "typescriptUsingTsConfig" mais j'obtiens toujours la même erreur. Toute idée de ce que je peux faire ici dans le but de tirer parti de l'Objet.les entrées de fonction ()?

164voto

Aluan Haddad Points 193

Vous êtes tout à fait exact que le changement target est la mauvaise approche et l'évolution lib est la bonne approche, cependant, vous avez spécifié une mauvaise version de la langue. Selon le MDN, Object.entries a été officiellement ajouté à la ES2017 spécification.

"lib": ["es2017"]

est donc ce que vous devez spécifier à la place*.

Si vous souhaitez ajouter uniquement les déclarations pour les méthodes de l' Object de la fonction qui ont été ajoutés dans ES2017, Tapuscrit vous permet de spécifier un plus granulaire de la valeur.

"lib": ["es2017.object"]

Comme le fait remarquer Alexandre Oiseau, par défaut, la valeur implicite de l' "lib" option dépend de la valeur spécifiée pour l' "target" si elle est présente.

Par exemple:

"target": "es2017"

Sera la cause de la conséquence de préfixé "lib.*" à être inclus par défaut, à moins d' "lib" est spécifié explicitement.

Notez que vous aurez probablement souhaitez ajouter un polyfill de la mise en œuvre elle-même, comme celui-ci, pour garantir cela fonctionne dans les anciens temps de fonctionnement.

Remarque: comme alternative, vous pouvez spécifier n'importe quelle version ultérieure

"lib": ["es2018"]

ou, naturellement, même

"lib": ["esnext"]

Ce dernier comprendra les déclarations pour la dernière norme fonctionnalités de la bibliothèque, connu pour le Tapuscrit de la langue. Comme il représente une cible en mouvement, cette option doit être utilisée avec précaution car tous les polyfills destinés à la prise de l'exécution correspondant est par définition une tâche complexe qui nécessite de la recherche et peuvent impliquer de chargement différents polyfills en fonction de votre environnement d'exécution cible.

Remarque: un peu de commentateurs se sont demandé pourquoi il serait erroné de changement --target au lieu de --lib que les deux auraient activer le code de vérification de type? La raison en est qu' --target des changements de la façon dont le code est transpiled. Par exemple, "target": "es2017" signifie qu' async fonctions ne sera pas transformé pour les vieux moteurs d'exécution. Il est incorrect, parce que l'intention était de permettre l'utilisation de bibliothèques supplémentaires, de ne pas modifier la syntaxe de la sortie et il est donc important de faire la distinction entre syntaxiques caractéristiques et les fonctionnalités de la bibliothèque.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X