javascript - type - La propiedad ''entradas'' no existe en el tipo ''ObjectConstructor''
object.values typescript (1)
Usted tiene toda la razón de que cambiar de target
es el enfoque incorrecto y cambiar lib
es el enfoque correcto, sin embargo, ha especificado la versión incorrecta del idioma. Según MDN , Object.entries
se agregó oficialmente en la especificación ES2017.
"lib": ["es2017"]
es por lo tanto lo que debes especificar en su lugar *.
Si desea agregar solo las declaraciones para los métodos de la función Object
que se agregaron en ES2017, TypeScript le permite especificar un valor más granular
"lib": ["es2017.object"]
Como lo señaló Alexander Bird, de manera predeterminada, el valor implícito de la opción "lib"
depende del valor especificado para "target"
si está presente.
Por ejemplo:
"target": "es2017"
Hará que la correspondiente "lib.*"
prefijo se incluya de forma predeterminada a menos que se especifique explícitamente "lib"
.
Tenga en cuenta que es probable que desee agregar un polyfill de la implementación en sí, como esta , para garantizar que esto funcione en tiempos de ejecución anteriores.
Nota: como alternativa puede especificar cualquier versión posterior.
"lib": ["es2018"]
o naturalmente incluso
"lib": ["esnext"]
Este último incluirá las declaraciones de las últimas características de la biblioteca estándar conocidas por el lenguaje TypeScript. Como representa un objetivo móvil, esta opción se debe usar con cuidado, ya que el relleno múltiple de todo el tiempo de ejecución correspondiente es, por definición, una tarea compleja que requerirá investigación y puede implicar la carga de diferentes rellenos automáticos dependiendo de su tiempo de ejecución objetivo.
Nota: algunos comentaristas preguntaron por qué sería incorrecto cambiar --target
lugar de --lib
ya que ambos permitirían que el código escriba check? La razón es que --target
cambia cómo se transpila el código. Por ejemplo, "target": "es2017"
significa que las funciones async
no se transformarán para tiempos de ejecución anteriores. Es incorrecto porque la intención era habilitar el uso de bibliotecas adicionales, no cambiar la sintaxis de salida, y es importante no completar las características sintácticas con las características de la biblioteca.
Estoy trabajando en una implementación ng2. Estoy usando la siguiente llamada de función para convertir un objeto en una matriz:
var authors = Object.entries(responseObject.Authors);
Esta es una función js estándar. Sin embargo, el compilador ts devuelve el siguiente error:
"Property ''entries'' does not exist on type ''ObjectConstructor''"
Según un google rápido, parece que la solución puede ser cambiar la propiedad de destino compilerOptions de es5 a es6. Sin embargo, después de una investigación previa para un problema anterior, pensé que podía aprovechar la funcionalidad de es6 al incluir la propiedad adicional "lib" en mi tsconfig.json a continuación:
"compilerOptions": {
"emitDecoratorMetadata": true,
"experimentalDecorators": true,
"module": "commonjs",
"noEmitOnError": true,
"noImplicitAny": false,
"outDir": "../Scripts/",
"removeComments": false,
"sourceMap": true,
"target": "es5",
"moduleResolution": "node",
"lib": [
"es2015",
"dom"
]
}
También intenté cambiar la propiedad de destino a es2015 y luego reconstruí el proyecto y ejecuté "typescriptUsingTsConfig", pero sigo recibiendo el mismo error. ¿Alguna idea de lo que puedo hacer aquí para aprovechar la función Object.entries ()?