1

我有这两个代码片段,我该如何更改它们,以便 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 现在一样是新的?

4

1 回答 1

2

这样我传入的任何类型都像现在的 MemberModel 一样是新的

因为 typescript 泛型在编译时被删除,你需要显式地传递它们,例如使用工厂,如下所示:

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);
    }
}
于 2016-09-19T22:59:19.727 回答