2016-09-19 10 views
1

私はこれらの2つのコードをどのように変更して、ジェネリック型として渡すことができるようにすることができますか?ジェネリック型制約をインスタンス化する方法

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; 
    } 
} 

どのように私はMemberModelが今あるように、私は渡すどんなタイプnewable残るようにジェネリック従うとIFollowable作るのですか?

答えて

2

ので、私は遺骨を渡しどんなタイプがMemberModelようnewableことを今

ある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); 
    } 
} 
関連する問題