Estoy tratando de formar una cadena separada por comas de un objeto,
const data = {"Ticket-1.pdf":"8e6e8255-a6e9-4626-9606-4cd255055f71.pdf","Ticket-2.pdf":"106c3613-d976-4331-ab0c-d581576e7ca1.pdf"};
const values = Object.values(data).map(x => x.substr(0, x.length - 4));
const commaJoinedValues = values.join(',');
console.log(commaJoinedValues);
¿Cómo hacer esto con TypeScript?
obteniendo un archivo de error:
severity: 'Error'
message: 'Property 'values' does not exist on type 'ObjectConstructor'.'
at: '216,27'
source: 'ts'
typescript
object
usuario2280016
fuente
fuente
Object.values
en TS para resolver el error de compilación del OP. Para hacer eso, simplemente necesitaES2017
en su--lib
entorno.ES2017
lib, y debe incluir la biblioteca polyfills donde usarla. Dar una respuesta diferente contra diferentes personas es el rey.ES7/Object.values()
. Tal vez piense que es complejo (no estoy en desacuerdo), pero esa es solo la naturaleza de tratar de usar características futuras como laObject.values()
actual. Siempre ha sido así. InclusoObject.keys()
debería estar polifundido si estaba apuntando a ES3 o si desea admitir IE8 (¡espero que ya no lo haga!) ¡Es una buena idea en general comprender las funciones de ES, el soporte del navegador y el polyfilling si está en desarrollo web!Object.values()
es parte de ES2017 , y el error de compilación que está obteniendo es porque necesita configurar TS para usar la biblioteca ES2017. Probablemente esté utilizando la biblioteca ES6 o ES5 en su configuración actual de TS.Solución: use
es2017
oes2017.object
en su--lib
opción de compilador .Por ejemplo, usando
tsconfig.json
:Tenga en cuenta que la orientación ES2017 con mecanografiado no no emiten polyfills en el navegador para ES2017 (es decir, los resuelve por encima de su compilación de error, pero todavía se puede encontrar un tiempo de ejecución de error ya que el navegador no implementa ES2017
Object.values
), le toca a usted para polyfill su proyecto codifícate si quieres. Y dadoObject.values
que todavía no está bien soportado por todos los navegadores (en el momento de escribir este artículo) definitivamente desea un polyfill:core-js
hará el trabajo .fuente
ES2017
aes2017
pero AFAIK esto no es necesario, pero siempre quiero aprender, ¿hubo alguna razón para el cambio?ES2017
,DOM
(en mayúsculas) aparece en eltsc --init
comentario como los valores válidos y funciona correctamente en el compilador, pero el esquema JSON sólo enumera lases2017
,dom
opciones (en minúsculas), por lo JSON IDE / bandera voluntad linterES2017
,DOM
como valores inválidos (aunque sean válidos). Un poco confuso.tsc --help
sin embargoObject.values()
. En otras palabras, puede evitar el error de compilación, pero aún puede encontrarse con errores de tiempo de ejecución si se ejecuta en un navegador que no tieneObject.values()
.Puede usar
Object.values
TypeScript haciendo esto(<any>Object).values(data)
si por alguna razón no puede actualizar a ES7 en tsconfig.fuente
if for some reason you can't update to ES7 in tsconfig
En vez de
utilizar
En su caso de ejemplo:
Esto ocultará el error del compilador ts.
fuente
lib
configuración para reflejar cómo lo está utilizando, no escapar intencionalmente del compilador.lib
configuración es solo para obtener la verificación de tipo correcta.He aumentado el objetivo en mi
tsconfig.json
para habilitar esta función en TypeScriptfuente
Acabo de llegar a este problema exacto con Angular 6 usando la CLI y los espacios de trabajo para crear una biblioteca usando
ng g library foo
.En mi caso, el problema estaba en la
tsconfig.lib.json
carpeta de la biblioteca que no se habíaes2017
incluido en lalib
sección.Cualquiera que se encuentre con este problema con Angular 6 solo necesita asegurarse de actualizarlo
tsconfig.lib.json
, así como su aplicacióntsconfig.json
fuente
Tener mi
tslint
configuración de reglas aquí siempre reemplaza la líneaObject["values"](myObject)
conObject.values(myObject)
.Dos opciones si tiene el mismo problema:
(Object as any).values(myObject)
o
fuente
Object["values"]
?La manera más simple es lanzar el
Object
toany
, así:Y listo - sin errores de compilación;)
fuente
Aún más simple, use
_.values
de underscore.js https://underscorejs.org/#valuesfuente