2014-09-02 10 views
6

में इंटरफेस का मिश्रण बनाना मेरे पास 80 से अधिक विधियों वाला एक वर्ग है, और प्रत्येक विधि कुछ परिभाषित इंटरफेस वाले ऑब्जेक्ट को स्वीकार करती है।टाइपस्क्रिप्ट

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 */ 
} 

सुंदर 'उबाऊ' सामान, के बाद से यह सिर्फ अंतर्निहित _call विधि से मैप और यह तरीकों में से प्रत्येक के लिए सुरक्षित टाइप बना रहा है।

लेकिन कभी कभी इन req परम वस्तुओं इस तरह, 2 इंटरफेस या अधिक, और बदले हर बार वहाँ एक "अजीब" के लिए एक और इंटरफेस बनाने की से बने होते हैं:

export interface ILoled extends IAccount { 
    loled: boolean; 
} 

export interface IRofloled extends ILoled { 
    rofled: boolean; 
} 

class Stuff { 
    getLols(req: ILoled){ 
    } 

    getRofls(req: IRofloled){ 
    } 
} 

वहाँ किसी भी तरह से मैं कर सकता है विधि पैरामीटर सूची के अंदर इंटरफ़ेस के बस "इनलाइन" मिश्रण के रूप में इसे डालें? जैसे (स्पष्ट रूप से काम नहीं करते हैं):

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

मुझे डर है कि आपको एक सुपर-इंटरफेस घोषित करना होगा। –

उत्तर

8

हां आप as of Typescript 1.6 का विस्तार कर सकते हैं। बुलाया गया, & ऑपरेटर का उपयोग प्रकारों को गठबंधन करने के लिए करें।

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

चीयर्स मैन बिल्कुल मुझे जो चाहिए –

2

वहाँ किसी भी तरह से मैं सिर्फ विधि पैरामीटर सूची

नहीं, आप अंदर इंटरफेस की एक "इनलाइन" mixin के रूप में यह डाल सकता है एक इंटरफ़ेस इनलाइन

+1

ऐसा लगता है _the उत्तर _... –