Domanda Come usare Object.values ​​con dattiloscritto?


Sto provando a formare una stringa separata da virgola da un oggetto,

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);

Come fare questo con dattiloscritto?

ottenendo un file di errore:

severity: 'Error'
message: 'Property 'values' does not exist on type 'ObjectConstructor'.'
at: '216,27'
source: 'ts'

44
2018-03-23 02:50


origine


risposte:


utilizzando invece Object.keys.

const data = {"Ticket-1.pdf":"8e6e8255-a6e9-4626-9606-4cd255055f71.pdf","Ticket-2.pdf":"106c3613-d976-4331-ab0c-d581576e7ca1.pdf"};
const values = Object.keys(data).map(key=>data[key]).map(x => x.substr(0, x.length - 4));
const commaJoinedValues = values.join(',');
console.log(commaJoinedValues);

16
2018-03-23 02:57



Object.values() è parte di ES2017e l'errore di compilazione che si ottiene è dovuto alla necessità di configurare TS per utilizzare la libreria ES2017. Probabilmente stai usando la libreria ES6 o ES5 nella tua attuale configurazione di TS.

Soluzione: usare es2017 o es2017.object nel tuo --lib opzione del compilatore.

Ad esempio, utilizzando tsconfig.json:

"compilerOptions": {
    "lib": ["es2017", "dom"]
}

Si noti che il targeting ES2017 con TypeScript fa non emetti polyfill nel browser per ES2017, spetta a te farlo nel tuo progetto se vuoi. E da allora Object.values non è ancora ben supportato da tutti i browser tu sicuramente vuoi un polyfill: core-js volere Fai il lavoro.


84
2018-03-23 04:43



Puoi usare Object.values in TypeScript facendo questo (<any>Object).values(data) se per qualche motivo non è possibile aggiornare a ES7 in tsconfig.


4
2018-06-07 18:56



Ho appena raggiunto questo problema con Angular 6 utilizzando la CLI e gli spazi di lavoro per creare una libreria usando ng g library foo.

Nel mio caso il problema era nel tsconfig.lib.json nella cartella della biblioteca che non aveva es2017 incluso nel lib sezione.

Chiunque inciampi in questo problema con Angular 6 deve solo assicurarsi di aggiornarsi tsconfig.lib.json così come la tua applicazione tsconfig.json


2
2018-05-11 10:54