Bagaimana cara menggunakan Object.values dengan TypeScript?


Saya sedang mencoba membuat string yang dipisahkan koma dari sebuah objek,

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

Bagaimana melakukan ini dengan TypeScript?

mendapatkan file kesalahan:

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

Jawaban #1

Object.values() adalah bagian dari ES2017, dan kesalahan kompilasi yang Anda dapatkan disebabkan karena Anda perlu mengonfigurasi TS untuk menggunakan pustaka ES2017. Anda mungkin menggunakan pustaka ES6 atau ES5 dalam konfigurasi TS Anda saat ini.

Solusi: gunakan es2017 atau es2017.object dalam opsi compiler --lib Anda.

Sebagai contoh, menggunakan tsconfig.json:

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

Perlu dicatat bahwa menargetkan ES2017 dengan TypeScript tidak menghasilkan polyfill di browser untuk ES2017 (artinya hal di atas menyelesaikan error compile Anda, tetapi Anda masih bisa menemui error runtime karena browser tidak mengimplementasikan ES2017 Object.values), terserah Anda untuk menambahkan polyfill ke kode proyek Anda sendiri jika ingin. Dan karena Object.values belum didukung dengan baik oleh semua browser (pada saat tulisan ini dibuat) Anda pasti ingin menggunakan polyfill: core-js akan melakukan pekerjaannya.

Jawaban #2

menggunakan Object.keys sebagai gantinya.

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

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

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

Jawaban #3

Anda bisa menggunakan Object.values di TypeScript dengan melakukan ini (<any>Object).values(data) jika karena suatu alasan Anda tidak bisa memperbarui ke ES7 di tsconfig.

Jawaban #4

Alih-alih

Object.values(myObject);

gunakan

Object["values"](myObject);

Dalam kasus contoh Anda:

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

Ini akan menyembunyikan kesalahan kompilator ts.

Jawaban #5

Saya telah meningkatkan target di tsconfig.json saya untuk mengaktifkan fitur ini di TypeScript

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

Artikel terkait