如何使泛型类型约束可实例化
How to make a generic type constraint instanciable
我有这两个代码片段,如何更改它们以便 MemberModel 可以作为通用类型传入并保持可实例化,以便我可以将 follow 方法提取到它自己的导出函数中?
export interface IFollowable {
follow(user: IUserModel): IMemberModel;
}
export class CardModel implements ICardModel, IFollowable {
public follow(user: IUserModel): IMemberModel {
let member = new MemberModel({userId: user.id});
member.role = UserRoles.follower;
this.members.push(member);
return member;
}
}
如何使 follow 和 IFollowable 通用,以便我传入的任何类型都像现在的 MemberModel 一样保持可更新?
so that the whatever type I pass in remains newable like the MemberModel is right now
因为打字稿泛型在编译时被删除,所以你需要显式地传递它们,例如使用如下所示的工厂:
type User = {name:string};
type Member = {name: string};
type MemberCreator = {new (user:User): Member};
interface Followable {
follow(user: User, memberCreator: MemberCreator): Member;
}
export class CardModel implements Followable {
public follow(user: User, memberCreator: MemberCreator): Member {
return new memberCreator(user);
}
}
我有这两个代码片段,如何更改它们以便 MemberModel 可以作为通用类型传入并保持可实例化,以便我可以将 follow 方法提取到它自己的导出函数中?
export interface IFollowable {
follow(user: IUserModel): IMemberModel;
}
export class CardModel implements ICardModel, IFollowable {
public follow(user: IUserModel): IMemberModel {
let member = new MemberModel({userId: user.id});
member.role = UserRoles.follower;
this.members.push(member);
return member;
}
}
如何使 follow 和 IFollowable 通用,以便我传入的任何类型都像现在的 MemberModel 一样保持可更新?
so that the whatever type I pass in remains newable like the MemberModel is right now
因为打字稿泛型在编译时被删除,所以你需要显式地传递它们,例如使用如下所示的工厂:
type User = {name:string};
type Member = {name: string};
type MemberCreator = {new (user:User): Member};
interface Followable {
follow(user: User, memberCreator: MemberCreator): Member;
}
export class CardModel implements Followable {
public follow(user: User, memberCreator: MemberCreator): Member {
return new memberCreator(user);
}
}