我有一个像这样的基类
export abstract class BaseObject<TResult>{
abstract myFunction(values: string): TResult;
getAll(param1: string): Promise<Array<TResult>> {
// do something
}
}
和子类设置如此
export interface IUser {
userID: number;
firstName: string;
lastName: string;
}
export class User implements BaseObject<User>, IUser {
constructor(
public userID: number,
public firstName: string,
public lastName: string
}
myFunction= (strUserDetails: string): User => {
// do something
}
}
这给了我以下错误:
Class 'User' incorrectly implements interface 'BaseObject<User>'. Property 'getAll' is missing in type 'User'.
不确定我在这里缺少什么。即使它是在基类中实现的,我还需要实现getAll吗?
答案 0 :(得分:1)
如果您删除可能与错误无关的内容,则问题会更明显:
abstract class BaseObject{
public getAll(): void {}
}
class User implements BaseObject {
}
问题是您使用的是implements
而不是extends
。在TypeScript中,类定义会生成类型信息(就像您已经定义了一个接口一样),这就是为什么它允许您实现类,就像它是一个接口一样。
您需要更改该关键字。您还需要向构造函数添加super()
调用,并使用public myFunction(strUserDetails: string): User {
定义myFunction(您当前将其定义为实例成员)。
答案 1 :(得分:0)
您应该使用extends来继承类。不要忘记调用超级构造函数,因为doc说:
包含构造函数的派生类必须调用super(),它将在基类上执行构造函数。
export abstract class BaseObject<TResult>{
abstract myFunction(values: string): TResult;
getAll(param1: string): Promise<Array<TResult>> {
// do something
}
}
export interface IUser {
userID: number;
firstName: string;
lastName: string;
}
export class User extends BaseObject<User> implements IUser {
//Fixed your syntax errors here.
constructor(
public userID: number,
public firstName: string,
public lastName: string) {
super();
}
//Keep your syntax, I use this syntax to keep the method syntax consistent
myFunction(strUserDetails: string): User{
// do something
}
}