Saya memiliki beberapa kode JavaScript yang menggunakan objek sebagai kamus; misalnya objek 'orang' akan menyimpan beberapa detail pribadi yang dikunci dari alamat email.
var people = {<email> : <'some personal data'>};
adding > "people[<email>] = <data>;"
getting > "var data = people[<email>];"
deleting > "delete people[<email>];"
Apakah mungkin untuk menggambarkan ini dalam naskah? atau apakah saya harus menggunakan Array?
arrays
object
dictionary
typescript
Robert Taylor
sumber
sumber
Jawaban:
Dalam versi naskah yang lebih baru, Anda dapat menggunakan:
Dalam versi yang lebih lama, Anda dapat menggunakan:
Anda juga dapat membuat antarmuka jika Anda tidak ingin mengetikkan seluruh jenis anotasi itu setiap saat:
sumber
map
berisi dua anggota: (<any> Object.prototype) .something = function () {}; Pelanggan kelas {} var map: {[email: string]: Customer; } = {}; map ['[email protected] '] = Pelanggan baru (); for (var i in map) {console.log (map [i])}var map:MapStringTo<Customer> = {};
Selain menggunakan objek seperti peta , telah ada
Map
objek aktual untuk beberapa waktu sekarang, yang tersedia dalam TypeScript ketika dikompilasi ke ES6, atau ketika menggunakan polyfill dengan definisi tipe ES6 :Ini mendukung fungsi yang sama seperti
Object
, dan banyak lagi, dengan sintaks yang sedikit berbeda:Ini sendiri memiliki beberapa keunggulan dibandingkan menggunakan map- seperti objek, seperti:
Object
(tidak,Object
tidak mendukung angka, itu mengubahnya menjadi string)--noImplicitAny
, karenaMap
selalu memiliki tipe kunci dan tipe nilai , sedangkan objek mungkin tidak memiliki indeks-tanda tanganObject
Selain itu, sebuah
Map
objek menyediakan API yang lebih kuat dan elegan untuk tugas-tugas umum, yang sebagian besar tidak tersedia melaluiObject
s sederhana tanpa meretas bersama-sama fungsi pembantu (meskipun beberapa di antaranya memerlukan ES6 iterator / polyfill iterable penuh untuk target ES5 atau di bawah):sumber
JSON.stringify()
, sehingga dapat digunakan misalnya untuk socket.io :(Map
serialisasi agak lucu. Saya, untuk satu, melakukan konversi ke objek-pasangan kunci-nilai sebelum membuat serial, dan kemudian kembali (misalnya objek{ key: "John", value: { firstName: "John" } }
).Anda dapat menggunakan antarmuka templated seperti ini:
sumber
let dict: Dictionary<number> = { "one": 1, "two": 2 };
Anda juga dapat menggunakan tipe Catatan dalam naskah:
sumber
Lodash memiliki implementasi Kamus sederhana dan memiliki dukungan TypeScript yang baik
Instal Lodash:
Impor dan penggunaan:
sumber
Anda dapat menggunakan
Record
ini:https://www.typescriptlang.org/docs/handbook/utility-types.html#recordkt
Contoh (Pemetaan antara AppointmentStatus enum dan beberapa data meta):
Sekarang dengan antarmuka sebagai nilai:
interface Icon { Name: string Color: string }
Pemakaian:
const icon: SemanticIcon = iconMapping[appointment.Status]
sumber
enum
atauclass/object
untukAppointmentStatus
- atau apakah itu penting?Ada perpustakaan yang menyediakan koleksi yang sangat diketik, queryable dalam naskah.
Koleksinya adalah:
Perpustakaan disebut koleksi-ts-generik . ( Kode sumber di GitHub )
Anda dapat membuat kamus dan menanyakannya seperti di bawah ini:
sumber