TypeScript Mengonversi Array Yang Diketik ke Array Nilai Kunci Generik
Saya memiliki berbagai data array yang terlihat seperti ini:
Countries: [{code: "USA", countryDesc: "United States"},{code: "MEX", countryDesc: "Mexico"}]
dan
States: [{code: "NY", countryDesc: "New York"},{code: "VA", stateDesc: "Virginia"}]
Yang ingin saya lakukan adalah mengonversi kode / countryDesc atau kode / stateDesc tertentu menjadi pasangan nilai kunci "generik" untuk digunakan. Karenanya, rutinitas konversi saya akan memberi saya ini:
[{key:"USA", value:"United States"},{key:"MEX", value:"Mexico"}]
dan
[{key:"NY", value:"New York"},{key:"VA", value:"Virginia"}]
Tujuan saya adalah untuk menulis fungsi yang mengambil array dan nama properti untuk kunci dan nilai dan kemudian mengubahnya menjadi array dengan kunci dan nilai, bukan nama properti lainnya.
Apa yang saya miliki adalah ini:
export interface IAnyArray {
key: string;
value: string;
}
const convertToKeyValue = (
array: IAnyArray[],
keyname: string,
valuename: string
) => {
if (array && array.length > 0) {
return array.map((a) => {
return { key: a[keyname], value: array[valuename] };
});
}
};
Saya mendapatkan kesalahan:
Elemen secara implisit memiliki tipe 'any' karena ekspresi tipe 'string' tidak dapat digunakan untuk tipe indeks 'IAnyArray'. Tidak ada tanda tangan indeks dengan parameter tipe 'string' yang ditemukan pada tipe 'IAnyArray'.ts (7053)
untuk [nama kunci] dan [nama nilai] dalam fungsi.
Beginilah cara saya melakukannya, khusus untuk masukan, tetapi saya ingin mekanisme "umum" jika memungkinkan:
const convertCountriesToKeyValue = (
countries: { code: string; countryDesc: string }[]
) => {
return countries.map((country) => {
return { key: country.code, value: country.countryDesc };
});
};
Saya telah mencari di web dan saya tidak dapat menemukan apa pun yang berguna untuk membantu mengatasi masalah ini.
Saya menghargai bantuan apa pun dalam hal ini. Terima kasih.
Jawaban
Jika saya memahami pertanyaan Anda dengan benar, Anda ingin meneruskan array objek dari nama properti apa pun, tetapi mengembalikan IAnyArray. Mungkin sesuatu seperti ini?
const convertToKeyValue = <T extends any>(
array: T[],
keyname: keyof T,
valuename: keyof T
) => {
return array.map((a) => {
return { key: a[keyname], value: a[valuename] };
});
};
const countries = [{ code: "USA", countryDesc: "United States" }, { code: "MEX", countryDesc: "Mexico" }];
const keyValueCountries = convertToKeyValue(countries, "code", "countryDesc");
Tempat bermain
Dari uraian Anda, inilah yang Anda cari:
const convertToKeyValue = (
array: IAnyArray[],
keyName: string,
valueName: string
) => {
return array.map((a) => {
return {[keyName]: a.key, [valueName]: a.value}
})
}
Tautan Playground
Catatan Samping: Saya akan merekomendasikan untuk menyimpan
keyNamedanvalueNamesebagai dua parameter pertama (seperti yang telah saya lakukan di taman bermain), untuk membuat fungsi lebih bisa disusun jika Anda memutuskan untuk membuat kari di masa mendatang.