Wie man anonyme Klassen in Typoskript

stimmen
7

Ich versuche, eine Hilfsfunktion zu erstellen, currying hinzuzufügen, gemeinsame Einstellungen für die Klassen zu erzeugen. Beispielsweise:

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

So dass jetzt, wenn maleperson und female Objekte erstellt werden, ist es eigentlich nur, anstatt eine neue Instanz der Person zurück.

var m = new MalePerson( 'john' );

Damit das Typsystem erlauben Sie mir noch ‚neu‘ zu verwenden, muss ein maleperson Konstruktortyp sein. Zum Beispiel: 'new (name: String) => Person'. Das muss auch der Rückgabetyp der Funktion.

Doch mit diesen Erklärungen hinzugefügt, kann ich nicht eine Funktion von innen ‚newPersonSex‘ zurückzukehren. Zum Beispiel ist diese ungültig:

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

Wie kann ich eine neue Konstruktor Funktion oder Klasse on the fly erstellen und zurück?

Veröffentlicht am 12/10/2012 um 20:14
quelle vom benutzer
In anderen Sprachen...                            


1 antworten

stimmen
2

Versuchen Sie, diese Definition von newPersonSex:

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

Das Problem mit dem Code ist, dass Funktionen nur Call-Signaturen haben, nicht Signaturen erstellen. Mein Beispiel arbeitet oben, um dieses, indem zunächst behauptet, dass die Art dieser Funktion eine beliebige ist, und dann behauptet, die jede Art tatsächlich ein Konstruktor ist.

Beachten Sie, dass die Art der newPersonSex wird von seinem Rückgabetyp abgeleitet werden, so dass keine Notwendigkeit, eine Funktion Anmerkung hinzuzufügen.

Beantwortet am 12/10/2012 um 21:17
quelle vom benutzer

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