Câu trả lời:
Từ khóa chỉ extendscó thể được sử dụng cho các giao diện và các lớp.
Nếu bạn chỉ muốn khai báo một loại có các thuộc tính bổ sung, bạn có thể sử dụng loại giao nhau :
type UserEvent = Event & {UserId: string}
CẬP NHẬT cho TypeScript 2.2, giờ đây có thể có một giao diện mở rộng loại giống như đối tượng , nếu loại đáp ứng một số hạn chế:
type Event = {
name: string;
dateCreated: string;
type: string;
}
interface UserEvent extends Event {
UserId: string;
}
Nó không hoạt động theo cách khác - UserEventphải được khai báo là giao diện, không phải là typenếu bạn muốn sử dụng extendscú pháp.
Và vẫn không thể sử dụng extend với các loại tùy ý - ví dụ: nó không hoạt động nếu Eventlà tham số loại mà không có bất kỳ ràng buộc nào.
interface A<T> extends B<T> {blar}Một giao diện chỉ có thể mở rộng một loại đối tượng hoặc giao điểm của các loại đối tượng với các thành viên được biết đến tĩnh
interface Identifiable<T> extends T { id: string }ra lỗi cho tôi "Giao diện chỉ có thể mở rộng một loại đối tượng hoặc giao điểm của các loại đối tượng với các thành viên được biết đến tĩnh.ts (2312)"
Những gì bạn đang cố gắng để đạt được tương đương với
interface Event {
name: string;
dateCreated: string;
type: string;
}
interface UserEvent extends Event {
UserId: string;
}
Cách bạn xác định các loại không cho phép chỉ định thừa kế, tuy nhiên bạn có thể đạt được một cái gì đó tương tự bằng cách sử dụng các loại giao cắt, như artem đã chỉ ra.
interfacekhi tôi thực sự có nghĩa làtype
typetừ khóa được sử dụng để xác định bí danh loại , chứ không phải giao diện hoặc các lớp học.