2015-07-18 25 views
9

Trong C#, tôi có thể làm điều này:typescript để thực hiện nhiều giao diện

class Dictionary<TKey, TVal> where TKey : IComparable, IEnumerable { } 

Có cách nào trong nguyên cảo 1.5 beta cho một tham số kiểu trong một lớp học chung hoặc chức năng để thực hiện nhiều giao diện, mà không tạo ra một giao diện hoàn toàn mới cho mục đích này?

Cách rõ ràng rõ ràng là không hoạt động do sự mơ hồ của dấu phẩy.

class Dictionary<TKey extends IComparable, IEnumerable, TValue> { } 

Bằng cách này, hoạt kê đủ, extends có thể xử lý công đoàn giao diện hoàn toàn tốt đẹp trong Generics:

class Dictionary<TKey extends IComparable|IEnumerable, TValue> { } 

Trả lời

1

Trong TS1.5, cách duy nhất bạn có thể làm điều đó là khai báo một giao diện mới mà mở rộng A và B, thật đáng buồn.

Một giải pháp thay thế khác là cầu nguyện cho TS1.6 sắp tới nơi hỗ trợ intersection type.

+0

Wow, tôi đã tìm loại ngã tư cuối cùng sẽ là một chuyện, nhưng không biết họ đang trên đường . Cảm ơn bạn đã trả lời. – Matt

13

Intersection types hiện nay ở đây kể từ khi TS 1.6 và bạn có thể sử dụng nó như thế này trong ví dụ trên của bạn:

class Dictionary<TKey extends IComparable & IEnumerable, TValue> { } 
+0

Điều này không chính xác giống như mở rộng cả hai giao diện. Mặc dù vậy, nó hoạt động trong những trường hợp đơn giản này, nơi mà các giao diện không có sự chồng chéo. – AlexG

+0

@AlexG Ý của bạn là gì? Tại sao các giao diện chồng chéo lại là một vấn đề? – Alex

+0

Với {a: number} & {a: string} loại kết quả sẽ âm thầm giống như {a: number & string} Không giống như kế thừa từ hai giao diện riêng biệt, trong đó thuộc tính xung đột sẽ tăng lỗi. – AlexG

Các vấn đề liên quan