Nestjs 覆盖基本服务方法

Nestjs override base service method

我在基础服务中有以下方法:

crud-base.service.ts

export class CrudBaseService {
  constructor(protected repo: MongoRepository<any>) {}
  
  async create(data) {
    // do stuff
  }
}

在这里我希望能够创建我的自定义创建方法,所以我将我的方法命名为与基本服务相同的方法

items.service.ts

@Injectable()
export class ItemsService extends CrudBaseService {
  constructor(
    @InjectRepository(Item)
    private itemsRepository: MongoRepository<Item>,
  ) {
    super(itemsRepository);
  }
}

async create(data) {
    // overriding base service method
}

出现以下错误:

TS2416: Property 'create' in type 'ItemsService' is not assignable to the same property in base type 'CrudBaseService'

两个函数的签名必须相同,即参数和return类型必须相同。你应该明确这一点。

export class CrudBaseService {
  constructor(protected repo: MongoRepository<any>) {}
  
  async create(data: YourType): Promise<YourReturnType> {
    // do stuff
  }
}


@Injectable()
export class ItemsService extends CrudBaseService {
  constructor(
    @InjectRepository(Item)
    private itemsRepository: MongoRepository<Item>,
  ) {
    super(itemsRepository);
  }
}

// this should work
async create(data: YourType): Promise<YourReturnType> {
    // overriding base service method
}