2012-10-12 19 views
7

में अज्ञात वर्गों को कैसे करें कक्षाओं के लिए सामान्य सेटअप उत्पन्न करने के लिए, मैं करी जोड़ने के लिए एक सहायक कार्य बनाने की कोशिश कर रहा हूं। उदाहरण के लिए:टाइपस्क्रिप्ट

class Person { 
    private name: string; 
    private sex: string; 

    constructor (name: string, sex: string) { 
     this.name = name; 
     this.sex = sex; 
    } 
} 

var newPersonSex = function (sex: string) { 
    return function (name: string) { 
     return new Person(name, sex); 
    } 
} 

var MalePerson = newPersonSex('male'); 
var FemalePerson = newPersonSex('female'); 

तो है कि अब जब MalePerson और FemalePerson ऑब्जेक्ट का निर्माण होगा, यह वास्तव में सिर्फ व्यक्ति का एक नया उदाहरण के बजाय देता है।

var m = new MalePerson('john'); 

टाइप सिस्टम के लिए मुझे अभी भी 'नया' उपयोग करने की अनुमति देने के लिए, मालेपर्सन को कन्स्ट्रक्टर प्रकार होना चाहिए। उदाहरण के लिए: 'नया (नाम: स्ट्रिंग) => व्यक्ति'। उसे फ़ंक्शन का रिटर्न प्रकार भी होना चाहिए।

हालांकि उन घोषणाओं के साथ, मैं 'newPersonSex' के अंदर से कोई फ़ंक्शन वापस नहीं कर सकता। उदाहरण के लिए यह अमान्य है:

var newPersonSex = function (sex: string) : new(name:string) => Person { 
    return function (name: string) { 
     return new Person(name, sex); 
    } 
} 

मैं कैसे एक नया कन्स्ट्रक्टर फ़ंक्शन या क्लास फ्लाई पर कैसे बना सकता हूं?

var newPersonSex = function (sex: string) { 
    return <new (name: string) => Person> <any> function (name: string) { 
     return new Person(name, sex); 
    } 
} 

अपने कोड के साथ समस्या यह है कि कार्यों बस, कॉल हस्ताक्षर है हस्ताक्षर का निर्माण नहीं है:

उत्तर

2

newPersonSex की इस परिभाषा का प्रयास करें। उपर्युक्त मेरा उदाहरण पहले इस बात पर जोर देकर काम करता है कि उस कार्य का प्रकार कोई है, और उसके बाद यह कहते हुए कि किसी भी प्रकार वास्तव में एक निर्माता है।

ध्यान दें कि newPersonSex के प्रकार को इसके रिटर्न प्रकार से अनुमानित किया जाएगा, इसलिए फ़ंक्शन एनोटेशन जोड़ने की आवश्यकता नहीं है।

संबंधित मुद्दे