Saya baru-baru ini menonton Tutorial tentang Angular 2 dengan TypeScript, tetapi tidak yakin kapan harus menggunakan Interface dan kapan harus menggunakan Model untuk memegang struktur data.
Contoh antarmuka:
export interface IProduct {
ProductNumber: number;
ProductName: string;
ProductDescription: string;
}
Contoh Model:
export class Product {
constructor(
public ProductNumber: number,
public ProductName: string,
public ProductDescription: string
){}
}
Saya ingin memuat data JSON dari URL dan mengikat ke Interface / Model. Kadang saya ingin objek data tunggal, lain kali saya ingin memegang dan array objek.
Yang mana yang harus saya gunakan dan mengapa?
angular
typescript
I_LIKE_FOO
sumber
sumber
Jawaban:
Antarmuka hanya pada waktu kompilasi. Ini hanya memungkinkan Anda untuk memeriksa bahwa data yang diharapkan diterima mengikuti struktur tertentu. Untuk ini, Anda dapat mengirimkan konten Anda ke antarmuka ini:
Lihat pertanyaan-pertanyaan ini:
Anda dapat melakukan sesuatu yang mirip dengan kelas tetapi perbedaan utama dengan kelas adalah bahwa mereka hadir saat runtime (fungsi konstruktor) dan Anda dapat menentukan metode di dalamnya dengan pemrosesan. Tetapi, dalam hal ini, Anda harus membuat instance objek untuk dapat menggunakannya:
sumber
var data = res.json();
benar-benarvar data: any = res.json();
ke kompiler sehingga kita kehilangan semua jenis pemeriksaandata
. Apa yang akan lebih berguna di sini akan menjadi sesuatu sepertivar data: ProductDto[] = res.json();
denganProductDto
menjadi antarmuka yang memodelkan struktur data di json yang dikembalikan.Angular style guide says not to use interfaces.Always use classes.
Lihat angular.io/guide/styleguide#style-03-03The Antarmuka menjelaskan baik kontrak untuk kelas atau baru jenis . Ini adalah elemen murni Script, sehingga tidak mempengaruhi Javascript.
Model, dan yaitu kelas , adalah fungsi JS aktual yang digunakan untuk menghasilkan objek baru.
Gunakan model, jika tidak maka JSON masih ada di Javascript Anda.
sumber
Seperti yang dikatakan @ThierryTemplier untuk menerima data dari server dan juga mentransmisikan model antar komponen (untuk menjaga daftar intellisense dan membuat kesalahan waktu desain), boleh saja menggunakan antarmuka tapi saya pikir untuk mengirim data ke server (DTO) lebih baik menggunakan kelas untuk mengambil keuntungan pemetaan DTO otomatis dari model.
sumber
Gunakan Kelas, bukan Antarmuka itulah yang saya temukan setelah semua penelitian saya.
Mengapa? Kelas saja kurang dari kode kelas-plus-antarmuka. (Pokoknya Anda mungkin memerlukan Kelas untuk model data)
Mengapa? Kelas dapat bertindak sebagai antarmuka (gunakan implement bukan extends).
Mengapa? Kelas antarmuka dapat menjadi token pencarian penyedia dalam injeksi dependensi Angular.
dari Panduan Gaya Sudut
Pada dasarnya Kelas dapat melakukan semua, apa yang akan dilakukan Antarmuka. Jadi mungkin tidak perlu menggunakan Antarmuka .
sumber