我正在尝试创建一个辅助函数,以添加柯里化,为类生成通用设置。例如:
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 对象被创建时,它实际上只是返回了一个新的 Person 实例。
var m = new MalePerson( 'john' );
为了让类型系统允许我仍然使用“new”,MalePerson 需要是构造函数类型。例如:'new (name:string) => Person'。这也需要是函数的返回类型。
但是,添加了这些声明后,我无法从“newPersonSex”内部返回函数。例如这是无效的:
var newPersonSex = function (sex: string) : new(name:string) => Person {
return function (name: string) {
return new Person(name, sex);
}
}
如何动态创建和返回新的构造函数或类?