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 ()?
OriginalL'auteur user8334943 | 2017-07-31
Vous devez vous connecter pour publier un commentaire.
Vous êtes tout à fait exact que le changement de
target
est pas la bonne approche et de changerlib
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.est donc ce que vous devez spécifier à la place*.
Si vous souhaitez ajouter seulement les déclarations pour les méthodes de la
Object
fonction qui ont été ajouté dans ES2017, Tapuscrit vous permet de spécifier plus précise de la valeurComme le fait remarquer Alexandre Oiseau, par défaut, la valeur implicite de la
"lib"
option dépend de la valeur spécifiée pour"target"
si présent.Par exemple:
Sera la cause de la conséquence de préfixé
"lib.*"
être inclus par défaut, sauf si"lib"
est spécifié explicitement.Noter 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
ou, naturellement, même
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: quelques intervenants ont 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 que--target
change la façon dont le code est transpiled. Par exemple,"target": "es2017"
signifie queasync
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 important de ne pas remplir syntaxique des fonctions avec les fonctions de la bibliothèque.non, vous aurez certainement besoin d'un polyfill pour IE 10. Le MDN lien a prise en charge du navigateur de l'information à la base.
Note pour les autres: si vous n'utilisez pas
lib
option du compilateur déjà, il peut avoir une valeur par défaut en fonction de vos objectifs qui seront remplacées lorsque vous définissezlib
. Voir les options de compilation de la documentation pour la liste de valeurs par défaut. J'ai dû ajouter explicitement la valeur par défautlib
paramètres pour ma cible ainsi quees2017.object
.pour sûr 🙂 je suis d'accord avec la tenue à jour aussi longtemps que possible et je vais effectuer la mise à jour bientôt. C'est une grande application, avec de nombreux développeurs, donc la mise à jour doit être planifié. Merci pour vos commentaires!
Cible change la façon dont le code est transpiled. Par exemple,
"target": "es2017"
signifie queasync
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.OriginalL'auteur Aluan Haddad