gpt4 book ai didi

constructor - 如何在 TypeScript 中匿名类

转载 作者:搜寻专家 更新时间:2023-10-30 20:38:26 37 4
gpt4 key购买 nike

我正在尝试创建一个辅助函数,添加柯里化(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 对象时,它实际上只是返回一个新的 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);
}
}

如何即时创建和返回新的构造函数或类?

最佳答案

试试这个 newPersonSex 的定义:

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

您的代码的问题是函数只有调用签名,没有构造签名。我上面的示例解决了这个问题,首先断言该函数的类型是 any,然后断言 any 类型实际上是一个构造函数。

请注意,newPersonSex 的类型将从其返回类型推断出来,因此无需添加函数注释。

关于constructor - 如何在 TypeScript 中匿名类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12865626/

37 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com