JL2*_*235 7 constructor anonymous-class typescript
我正在尝试创建一个辅助函数,添加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');
Run Code Online (Sandbox Code Playgroud)
因此,现在当创建MalePerson和FemalePerson对象时,它实际上只返回Person的新实例.
var m = new MalePerson( 'john' );
Run Code Online (Sandbox Code Playgroud)
为了让类型系统允许我仍然使用'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);
}
}
Run Code Online (Sandbox Code Playgroud)
如何动态创建和返回新的构造函数或类?
小智 2
试试 newPersonSex 的定义:
var newPersonSex = function (sex: string) {
return <new (name: string) => Person> <any> function (name: string) {
return new Person(name, sex);
}
}
Run Code Online (Sandbox Code Playgroud)
您的代码的问题在于函数只有调用签名,而不是构造签名。我上面的示例通过首先断言该函数的类型是any,然后断言any类型实际上是构造函数来解决这个问题。
请注意,newPersonSex 的类型将从其返回类型推断出来,因此无需添加函数注释。
归档时间: |
|
查看次数: |
2426 次 |
最近记录: |