कैसे टाइपप्रति में गुमनाम वर्गों के लिए

वोट
7

मैं currying जोड़ने के लिए, कक्षाओं के लिए सबसे सामान्य चरण उत्पन्न करने के लिए एक सहायक समारोह बनाने के लिए कोशिश कर रहा हूँ,। उदाहरण के लिए:

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' );

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

हालांकि उन घोषणाओं के साथ जोड़ा, मैं अंदर 'newPersonSex' से एक समारोह नहीं लौट सकते। उदाहरण के लिए इस अमान्य है:

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

मैं कैसे बना सकते हैं और एक नए निर्माता समारोह या मक्खी पर वर्ग लौट सकते हैं?

12/10/2012 को 20:14
का स्रोत उपयोगकर्ता
अन्य भाषाओं में...                            


1 जवाब

वोट
2

newPersonSex की इस परिभाषा का प्रयास करें:

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

अपने कोड के साथ समस्या यह है कि कार्यों बस, कॉल हस्ताक्षर है हस्ताक्षर का निर्माण नहीं है। मेरे उपरोक्त उदाहरण पहले उसने दृढ़तापूर्वक कहा कि है कि समारोह के प्रकार के किसी भी है, और फिर जोर दिया कि किसी भी प्रकार के वास्तव में एक निर्माता है के द्वारा इस के आसपास काम करता है।

ध्यान दें कि newPersonSex के प्रकार अपनी वापसी प्रकार से अनुमान लगाया जा जाएगा, ताकि एक समारोह टिप्पणी जोड़ने के लिए कोई जरूरत नहीं।

12/10/2012 को 21:17
का स्रोत उपयोगकर्ता

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more