2012-10-12 22 views
7

Próbuję utworzyć funkcję pomocnika, aby dodać curry, aby wygenerować wspólne ustawienia dla klas. Na przykład:Jak anonimowe klasy w TypeScript

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

Tak więc teraz, gdy tworzone są obiekty MalePerson i FemalePerson, w rzeczywistości po prostu zwraca nowe wystąpienie osoby.

var m = new MalePerson('john'); 

Aby system typów mógł nadal używać "nowego", MalePerson musi być typem konstruktora. Na przykład: "new (name: string) => Person". Musi to być również typ zwrotu funkcji.

Jednak po dodaniu tych deklaracji nie mogę zwrócić funkcji z wnętrza "newPersonSex". Na przykład jest to nieprawidłowe:

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

Jak mogę utworzyć i od nowa nową funkcję lub klasę konstruktora w locie?

Odpowiedz

2

Spróbuj definicję newPersonSex:

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

Problem z kodem jest to, że działa tylko mieć podpisy połączeń, nie budować podpisy. Mój powyższy przykład działa wokół tego, najpierw stwierdzając, że typ tej funkcji jest dowolny, a następnie twierdząc, że każdy typ jest w rzeczywistości konstruktorem.

Należy pamiętać, że typ newPersonSex będzie wywnioskowany z jego typu zwracania, więc nie trzeba dodawać adnotacji funkcji.

Powiązane problemy