Website-Suche

Wie verwendet man Object.values mit TypeScript?


Ich versuche, aus einem Objekt eine durch Kommas getrennte Zeichenkette zu erstellen,

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

Wie macht man das mit TypeScript?

erhalte eine Fehlerdatei:

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

Antwort #1

Object.values() ist Teil von ES2017, und der Kompilierungsfehler, den Sie erhalten, liegt daran, dass Sie TS so konfigurieren müssen, dass es die ES2017-Bibliothek verwendet. Sie verwenden wahrscheinlich die ES6- oder ES5-Bibliothek in Ihrer aktuellen TS-Konfiguration.

Lösung: Verwenden Sie es2017 oder es2017.object in Ihrer --lib-Compileroption.

Zum Beispiel die Verwendung von tsconfig.json:

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

Beachten Sie, dass das Anvisieren von ES2017 mit TypeScript keine Polyfills im Browser für ES2017 bereitstellt (was bedeutet, dass das Obige Ihren Compile-Fehler löst, Sie aber trotzdem auf einen Runtime-Fehler stoßen können, weil der Browser ES2017 Object.values nicht implementiert), es liegt an Ihnen, den Projektcode selbst zu polyfillen, wenn Sie möchten. Und da Object.values zum Zeitpunkt dieses Schreibens noch nicht von allen Browsern gut unterstützt wird, benötigen Sie definitiv einen Polyfill: core-js erledigt die Arbeit.

Antwort #2

Verwenden Sie stattdessen Object.keys.

const data = {
  a: "first",
  b: "second",
};

const values = Object.keys(data).map(key => data[key]);

const commaJoinedValues = values.join(",");
console.log(commaJoinedValues);

Antwort #3

Sie können Object.values in TypeScript verwenden, indem Sie dies tun: (<any>Object).values(data), falls Sie aus irgendeinem Grund nicht auf ES7 in tsconfig aktualisieren können.

Antwort #4

Statt

Object.values(myObject);

benutzen

Object["values"](myObject);

In Ihrem Beispiel:

const values = Object["values"](data).map(x => x.substr(0, x.length - 4));

Dies wird den TypeScript-Compilerfehler ausblenden.

Antwort #5

Ich habe das Ziel in meiner tsconfig.json erhöht, um diese Funktion in TypeScript zu aktivieren

{
    "compilerOptions": {
        "target": "es2017",
        ......
    }
}

Verwandte Artikel