Typescript - 无法识别基类中的非抽象方法

时间:2016-05-06 17:48:59

标签: typescript abstract-class

我有一个像这样的基类

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吗?

2 个答案:

答案 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
  }
}