Apa perbedaan antara pernyataan ini (antarmuka vs tipe)?
interface X {
a: number
b: string
}
type X = {
a: number
b: string
};
typescript
wonea
sumber
sumber
Jawaban:
Sesuai dengan Spesifikasi Bahasa TypeScript :
Spesifikasi selanjutnya menyebutkan:
sumber
interface Point { x: number; } interface Point { y: number; }
extends or implements
tidak lagi menjadi masalah. Jenis dapat diperpanjang dan diimplementasikan oleh aclass
. Berikut ini contoh typescriptlang.org/play/…Pembaruan 2019
Jawaban saat ini dan dokumentasi resmi sudah usang. Dan bagi mereka yang baru mengenal TypeScript, terminologi yang digunakan tidak jelas tanpa contoh. Di bawah ini adalah daftar perbedaan terbaru.
1. Objek / Fungsi
Keduanya dapat digunakan untuk menggambarkan bentuk objek atau fungsi tanda tangan. Tetapi sintaksnya berbeda.
Antarmuka
Ketik alias
2. Jenis Lainnya
Tidak seperti antarmuka, jenis alias juga dapat digunakan untuk jenis lain seperti primitif, serikat pekerja, dan tupel.
3. Perpanjang
Keduanya dapat diperpanjang, tetapi sekali lagi, sintaksnya berbeda. Selain itu, perhatikan bahwa antarmuka dan jenis alias tidak saling eksklusif. Antarmuka dapat memperluas alias tipe, dan sebaliknya.
Antarmuka memperluas antarmuka
Jenis alias meluas alias jenis
Antarmuka memperluas alias tipe
Ketik alias memperluas antarmuka
4. Implikasinya
Kelas dapat mengimplementasikan antarmuka atau ketik alias, keduanya dengan cara yang persis sama. Namun perlu dicatat bahwa kelas dan antarmuka dianggap cetak biru statis. Oleh karena itu, mereka tidak dapat mengimplementasikan / memperluas jenis alias yang menamai jenis serikat.
5. Penggabungan deklarasi
Tidak seperti jenis alias, antarmuka dapat didefinisikan beberapa kali, dan akan diperlakukan sebagai antarmuka tunggal (dengan anggota semua deklarasi digabungkan).
sumber
type
atauinterface
? Saya masih bingung kapan harus menggunakan yang satu atau yang lain.Pada TypeScript 3.2 (Nov 2018), berikut ini benar:
sumber
type
dengan batasan tertentu (dan pada TypeScript 3.7 batasan ini juga hilang). Antarmuka dapat memperluas tipe. Kelas dapat mengimplementasikan tipe. Selain itu, menyajikan data sebagai tangkapan layar dari tabel membuatnya benar-benar tidak dapat diakses oleh orang-orang dengan gangguan penglihatan.https://www.typescriptlang.org/docs/handbook/advanced-types.html
sumber
Contoh dengan Jenis:
// buat struktur pohon untuk objek. Anda tidak dapat melakukan hal yang sama dengan antarmuka karena kurangnya persimpangan (&)
// ketik untuk membatasi variabel untuk menetapkan hanya beberapa nilai. Antarmuka tidak memiliki penyatuan (|)
// terima kasih pada tipe, Anda dapat mendeklarasikan tipe NonNullable berkat mekanisme kondisional.
Contoh dengan Antarmuka:
// Anda dapat menggunakan antarmuka untuk OOP dan menggunakan 'implement' untuk mendefinisikan objek / kerangka kelas
// Anda dapat memperluas antarmuka dengan antarmuka lain
sumber
Selain jawaban brilian yang telah disediakan, ada perbedaan nyata dalam hal memperluas tipe vs antarmuka. Saya baru-baru ini mengalami beberapa kasus di mana antarmuka tidak dapat melakukan pekerjaan:
sumber
dokumentasi telah dijelaskan
Antarmuka vs. Alias Jenis
sumber