Tôi có một giao diện chung như ví dụ này với một loại ràng buộc duy nhất:
export interface IExample<T extends MyClass> {
getById(id: number): T;
}
Có thể chỉ định nhiều ràng buộc kiểu thay vì chỉ một?
Câu trả lời:
Typecript không cung cấp cú pháp để nhận nhiều thừa kế cho các kiểu chung. Tuy nhiên, bạn có thể đạt được ngữ nghĩa tương tự bằng cách sử dụng các loại Liên minh và loại Giao điểm. Trong trường hợp của bạn, bạn muốn một giao lộ:
interface Example<T extends MyClass & OtherClass> {}
Đối với Liên minh của cả hai loại:
interface Example<T extends MyClass | OtherClass> {}
<T extends MyInterfaceA & MyInterfaceB>
yêu cầu rằng kiểu thực hiện cả hai giao diện.
extends A|B
là mở rộng A HOẶC B cũng như extends A & B
mở rộng cả hai! vì vậy có lẽ bạn nên chỉ định cả hai trong câu trả lời của mình ....
Một công việc xung quanh việc này sẽ là sử dụng một siêu giao diện (cũng trả lời câu hỏi "tại sao bạn lại cho phép một giao diện kế thừa từ một lớp").
interface ISuperInterface extends MyClass, OtherClass {
}
export interface IExample<T extends ISuperInterface> {
getById(id: number): T;
}
Tham khảo nhận xét về một giao diện bắt nguồn từ một lớp ... tên là gì?
Tôi tìm thấy điều này trong phần 3.5 của thông số kỹ thuật 0.9.0:
Khai báo giao diện chỉ giới thiệu các kiểu được đặt tên, trong khi khai báo lớp giới thiệu các kiểu được đặt tên và các hàm khởi tạo tạo ra các thể hiện triển khai của các kiểu được đặt tên đó. Các kiểu được đặt tên được giới thiệu bởi khai báo lớp và giao diện chỉ có sự khác biệt nhỏ (các lớp không thể khai báo thành viên tùy chọn và giao diện không thể khai báo thành viên riêng) và trong hầu hết các ngữ cảnh có thể hoán đổi cho nhau. Đặc biệt, các khai báo lớp chỉ có các thành viên công khai giới thiệu các kiểu được đặt tên có chức năng chính xác như những kiểu được tạo bởi khai báo giao diện.