Apa perbedaan antara berikut ini?
type Foo = {
foo: string
};
interface Foo {
foo: string;
}
javascript
typescript
martiansnoop
sumber
sumber
Jawaban:
Antarmuka dapat diperpanjang
dan juga ditambah
Alias tipe, bagaimanapun, dapat mewakili beberapa hal yang tidak dapat dilakukan antarmuka
Jadi secara umum jika Anda hanya memiliki tipe objek biasa, seperti yang ditunjukkan dalam pertanyaan Anda, antarmuka biasanya merupakan pendekatan yang lebih baik. Jika Anda mendapati diri Anda ingin menulis sesuatu yang tidak dapat ditulis sebagai antarmuka, atau hanya ingin memberi nama yang berbeda, alias tipe lebih baik.
sumber
Type aliases, however, can represent some things interfaces can't
Sepertinya saya contoh AndaNeatAndCool
danJustSomeOtherName
dapat dibuat sebagai antarmuka yang memperluas yang adaNeat
,Cool
atauSomeType
jenis.interface NeatAndCool extends Neat, Cool {}
interface JustSomeOtherName extends SomeType {}
Juga, sebuah antarmuka dapat diimplementasikan .
sumber
class Thing implements Neat, Cool
Tipe seperti Antarmuka dan sebaliknya: keduanya dapat diimplementasikan oleh kelas. tetapi ada beberapa perbedaan penting: 1. ketika Type diimplementasikan oleh sebuah kelas, properti milik Type harus diinisialisasi di dalam kelas, sedangkan dengan Interface mereka harus dideklarasikan. 2. seperti yang disebutkan @ryan: Antarmuka dapat memperluas Antarmuka lain. Tipe tidak bisa.
sumber
Perbedaan antara ini juga sudah ada di utas ini.
Disini
type Foo
daninterface Foo
tampilannya hampir mirip sehingga membingungkan.interface
adalah kontrak bahwa properti berikut (di sinifoo:string
) harus ada di objek.interface
tidakclass
. Ini digunakan ketika bahasa tidak mendukung Warisan Ganda. Jadiinterface
bisa menjadi struktur umum antara kelas yang berbeda.Tetapi
type
daninterface
digunakan dalam konteks yang sangat berbeda.Ini
type
darifoo
adalahFoo
dantoday
adalahDate
. Ini seperti deklerasi variabel yang menyimpan informasi jenis variabel lain.type
seperti superset antar muka, kelas, tanda tangan fungsi, jenis lain atau bahkan nilai (sepertitype mood = 'Good' | 'Bad'
). Di bagian akhirtype
menjelaskan kemungkinan struktur atau nilai variabel.sumber
Salah jika mengatakan "Antarmuka dapat diimplementasikan" karena tipe juga dapat diterapkan
Meskipun Anda dapat melakukan ini, Anda tidak dapat menerapkan tipe yang merupakan gabungan tipe, yang benar-benar masuk akal :)
sumber
tipe di skrip ketikan digunakan untuk mereferensikan tipe yang sudah ada . Itu tidak bisa diperpanjang seperti
interface
. Contohnyatype
adalah:Anda dapat menggunakan Istirahat dan Spread dalam tipe:
Antarmuka, di sisi lain, memungkinkan Anda membuat JENIS BARU.
sumber