Jawaban:
Kata kunci hanya extendsdapat digunakan untuk antarmuka dan kelas.
Jika Anda hanya ingin mendeklarasikan tipe yang memiliki properti tambahan, Anda bisa menggunakan tipe persimpangan :
type UserEvent = Event & {UserId: string}
UPDATE untuk TypeScript 2.2, sekarang mungkin untuk memiliki antarmuka yang memperluas tipe seperti objek , jika jenisnya memenuhi beberapa batasan:
type Event = {
name: string;
dateCreated: string;
type: string;
}
interface UserEvent extends Event {
UserId: string;
}
Tidak bekerja sebaliknya - UserEventharus dinyatakan sebagai antarmuka, bukan typejika Anda ingin menggunakan extendssintaks.
Dan masih tidak mungkin untuk digunakan extend dengan tipe arbitrer - misalnya, itu tidak berfungsi jika Eventmerupakan parameter tipe tanpa kendala.
interface A<T> extends B<T> {blar}Antarmuka hanya dapat memperluas jenis objek atau persimpangan jenis objek dengan anggota yang dikenal secara statis
interface Identifiable<T> extends T { id: string }memberi saya kesalahan "Antarmuka hanya dapat memperluas jenis objek atau persimpangan jenis objek dengan anggota yang dikenal secara statis.ts (2312)"
Apa yang ingin Anda capai setara dengan
interface Event {
name: string;
dateCreated: string;
type: string;
}
interface UserEvent extends Event {
UserId: string;
}
Cara Anda mendefinisikan jenis tidak memungkinkan untuk menentukan pewarisan, namun Anda dapat mencapai sesuatu yang serupa menggunakan tipe persimpangan, seperti yang ditunjukkan artem .
interfaceketika saya benar-benar berartitype
typekunci digunakan untuk mendefinisikan alias tipe , bukan antarmuka atau kelas.