Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

593
Visualizações
La propiedad 'entradas' no existe en el tipo 'ObjectConstructor'

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 rápido google, parece que la solución puede ser cambiar la propiedad de destino de compilerOptions de es5 a es6. Sin embargo, después de algunas investigaciones previas 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 teniendo el mismo error. ¿Alguna idea de lo que puedo hacer aquí para aprovechar la función Object.entries() ?

over 4 years ago · Santiago Trujillo
2 Respostas
Responde à pergunta

0

Tiene toda la razón en que cambiar 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 debe 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 señaló Alexander Bird, de forma 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 el prefijo correspondiente "lib.*" se incluya de forma predeterminada a menos que se especifique explícitamente "lib" .

Tenga en cuenta que probablemente desee agregar un polyfill de la implementación en sí, como este , para asegurarse de que esto funcione en tiempos de ejecución más antiguos.

Nota: como alternativa puede especificar cualquier versión posterior

 "lib": ["es2020"]

o naturalmente incluso

 "lib": ["esnext"]

Este último incluirá las declaraciones de las funciones de biblioteca estándar más recientes conocidas en el lenguaje TypeScript. Como representa un objetivo en movimiento, esta opción debe usarse con cuidado, ya que polillenar todo el tiempo de ejecución correspondiente es, por definición, una tarea compleja que requerirá investigación y puede implicar cargar diferentes polirrellenos según el tiempo de ejecución de destino.

Además, la naturaleza de matriz de la opción "lib" le permite combinar varios valores para que coincidan con su tiempo de ejecución. Por ejemplo, para hacer coincidir los navegadores web compatibles con es2015 con la adición de estos métodos de objetos proporcionados por un polyfill, puede escribir

 "lib": ["es2015", "es2017.object", "dom"]

Consulte el Manual de TypeScript para obtener detalles adicionales.

Nota: algunos comentaristas preguntaron por qué sería incorrecto cambiar --target en lugar de --lib , ya que ambos habilitarían el código para verificar el tipo. La razón es que --target cambia la forma en que se transpila el código. Por ejemplo, "target": "es2017" significa que las funciones async no se transformarán para tiempos de ejecución más antiguos. Es incorrecto porque la intención era habilitar el uso de bibliotecas adicionales, no cambiar la sintaxis de salida y, por lo tanto, es importante distinguir entre funciones sintácticas y funciones de biblioteca.

over 4 years ago · Santiago Trujillo Relatório

0

La respuesta aceptada no funcionó para mí, pero adapté la respuesta de Property 'assign' does not exist on type 'ObjectConstructor' así:

 const changedFields = (<any>Object).entries(this.ngForm.form.controls) .filter(value => value[1].dirty);

Compartiendo para cualquier persona con la misma situación.

over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda