我有一个类,可以通过各种子类进行扩展。每个子类不需要重新实现类方法,只需要声明来推断正确的类型检查。
举个例子:
class QueryBuilder {
insert<T>(data: T): string {
return '';
}
}
class User extends QueryBuilder {
insert<IUser>(data: IUser): string;
}
interface IUser {
name: string,
email: string
}
这样我就会收到以下错误:
Function implementation is missing or not immediately following the declaration.
(method) User.insert<IUser>(data: IUser): string
有没有办法得到我想要的东西,而不必为每个子类重复实现?
答案 0 :(得分:1)
我正以错误的方式解决问题。
我应该将它分配给类,而不是将泛型类型分配给每个方法,如下所示:
class QueryBuilder<T> {
insert(data: T): string {
return '';
}
}
// Just set your interface as the generic type when extending,
// typechecking will work correctly now
class User extends QueryBuilder<IUser> {
}
interface IUser {
name: string,
email: string
}
const user = new User();
user.insert('foo') // error
user.insert({ username: '' }) // error
user.insert({ name: '', email: '' }) // correct
答案 1 :(得分:1)
我认为有两种主要方法可以解决这个问题。第一种是将泛型参数移动到类中。如果要在集合中使用它,甚至可以给它一个默认值:
struct
如果你想要的类型在基类上作为属性可用,你可以做另一个技巧:
class QueryBuilder<T = any> {
insert(data: T): string {
return "";
}
}
class User extends QueryBuilder<IUser> { }