Tôi có một lớp Typecript bao gồm một generic cần mở rộng một lớp khác và thực hiện một giao diện. Dưới đây là ví dụGenerics Typescript mở rộng lớp và giao diện
interface IHasImage {
imageUrl():string;
}
class Model {
}
class View<T extends Model & IHasImage> {
}
Đây là loại cú pháp tôi đã thấy ở nơi khác nhưng có cách nào để làm điều này trong Typecript?
chỉnh sửa: Hãy thử dán sau vào sân chơi: http://www.typescriptlang.org/Playground
...[removed edit 1 code]
chỉnh sửa 2: trả lời và lý luận
(Tôi xin lỗi, ví dụ đầu tiên đã có một vài sai sót!) Tôi đã đánh dấu câu trả lời chính xác bên dưới, mặc dù có thể cần một vài gợi ý như được nêu trong vấn đề github này (https://github.com/Microsoft/TypeScript/issues/1885)
Với mã sau bạn có thể thấy phương pháp luận hoạt động.
Chỉ có điều khác để nói là cố gắng để implement
giao diện từ một lớp học mà không mở rộng các lớp cơ sở cũng thất bại. Tuy nhiên vì kiểm tra Typecript là dựa trên cấu trúc của đối tượng, nó sẽ thành công nếu bạn thêm thuộc tính name
vào lớp một cách thủ công.
Đây cũng là lý do tại sao nó thành công với ModelCorrect
mà extends
nhưng không implements
.
tôi nghĩ rằng có lỗi trong ví dụ. điều này trong constructor không phải là giá trị kiểu generic.Lớp nên có một mô hình: T tài sản hoặc constructur có thể chấp nhận một giá trị: T đối số – Martijn