Typescript实现泛型接口时fromColumn方法类型不匹配如何解决?
错误原因
- 你定义的
ToTable接口中,fromColumn<T>()方法额外声明了一个方法级的泛型参数T,这个泛型是独立于接口级泛型T的局部占位符,优先级高于接口的泛型,两者没有关联。 - 你在实现
ToTable<User>接口时,方法上写的fromColumn<User>(columns: Column[]): User里的User,本质是给这个局部泛型占位符起的名字,和你实际导入的User类完全是两个不同的类型,所以会报类型不匹配的错误。 - 额外说明:原接口定义的
fromColumn没有声明入参,你实现时加了columns: Column[]参数,也会导致接口实现校验不通过,需要同步修改接口定义。
修复方案
第一步:修正接口定义
删除fromColumn方法上多余的泛型声明,补全入参定义,直接复用接口级的泛型T:
export interface ToTable<T> { value: T toColumns(): Column // 去掉方法自身的<T>泛型声明,补全columns入参 fromColumn(columns: Column[]): T }
第二步:修正类的实现代码
删除fromColumn方法上多余的泛型声明即可:
export class UserService implements ToTable<User> { value: User constructor() { this.value = new User() } // 去掉方法前的<User>泛型声明 fromColumn(columns: Column[]): User { return this.value } toColumns(): Column { let col = new Column() col.field = 'name' col.value = 'testVal' return col } }
内容的提问来源于stack exchange,提问作者irek
相关产品推荐
相关产品推荐

