我试图在 CRUD 系统的上下文中概括我的实体创建系统,以避免冗余代码重复。
基类 CrudController<T>
应提供通用方法 createEntity(data)
,该方法创建并返回具有给定数据的实体。数据类型为 Partial<T>
。
在扩展 StateController
的派生类 CrudController<State>
中,我将其实现为:
protected createEntity(data: Partial<State>): Promise<State> {
const repository = getRepository(State);
const entity = repository.create(data);
return repository.save(entity);
}
... 完美运行。但是,当我尝试使用以下内容将其推广到基类时:
protected createEntity(data: Partial<T>): Promise<T> {
const repository = getRepository(this.entityType);
const entity = repository.create(data);
return repository.save(entity);
}
... 我遇到了 TypeScript,抱怨没有与调用匹配的重载。我知道 Repository.create(...)
的签名需要 DeepPartial<T>
而不是简单的 Partial<T>
,但这对于非泛化方法效果很好,那么为什么不在这里呢?
泛型上是否存在某种类型约束,我遗漏了什么?