2014-09-02 16 views
6

Tôi có một lớp với hơn 80 phương thức và mỗi phương thức chấp nhận một đối tượng có chứa một số giao diện được xác định.Tạo một hỗn hợp các giao diện trong Typescript

class Stuff { 
    /* many more */ 
    getAccount(req: IAccount, callback: ICallback) { 
     return this._call('getAccount', req, callback); 
    } 

    getIds(req: IIDs, callback: ICallback) { 
     return this._call('getIds', req, callback); 
    } 
    /* many more */ 
} 

khá 'nhàm chán' thứ, vì nó chỉ lập bản đồ với phương pháp underlaying _call và làm cho nó là loại an toàn cho từng phương pháp.

Nhưng đôi khi những req đối tượng param được tạo thành từ 2 giao diện trở lên, và thay vì tạo giao diện khác cho mỗi lần có một "vụng về", như thế này:

export interface ILoled extends IAccount { 
    loled: boolean; 
} 

export interface IRofloled extends ILoled { 
    rofled: boolean; 
} 

class Stuff { 
    getLols(req: ILoled){ 
    } 

    getRofls(req: IRofloled){ 
    } 
} 

là có cách nào tôi có thể chỉ cần đặt nó như là một "nội tuyến" mixin của giao diện bên trong danh sách tham số phương pháp? tương tự (mà rõ ràng là không làm việc):

class Stuff { 
    getMoreStuff(req: <{} extends IAccount, ITime>) { 
    } 
} 
+0

Tôi e rằng bạn phải khai báo một giao diện siêu. –

Trả lời

8

Có, bạn có thể, as of Typescript 1.6. Được gọi là Loại giao lộ, sử dụng toán tử & để kết hợp các loại.

function extend<T, U>(first: T, second: U): T & U { 
    let result = <T & U> {}; 
    for (let id in first) { 
    result[id] = first[id]; 
    } 

    for (let id in second) { 
    if (!result.hasOwnProperty(id)) { 
     result[id] = second[id]; 
    } 
    } 
    return result; 
} 

var x = extend({ a: "hello" }, { b: 42 }); 
x.a; // works 
x.b; // works 
+1

Chúc mừng người đàn ông chính xác những gì tôi cần –

2

là có cách nào tôi có thể chỉ cần đặt nó như là một "inline" mixin các giao diện bên trong danh sách tham số phương pháp

số Bạn không thể mở rộng một giao diện nội tuyến

+1

Hình như câu trả lời _the _... –

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