我想创建一个通用的 http 服务,并且我想有一个save(value)
类似的方法来调用create(value)
或update(value)
在下面。扭曲是我想选择配置值create
接受的类型,它可以与更新值完全不同。
像这样:
class HttpService {
create(model) {
...
}
update(model) {
...
}
save(model) {
if(model.id === null || model.id === undefined) {
return this.create(model);
}
return this.update(model);
}
}
this 的泛型是这样的:
class HttpService<I, E, C> {
create(model: E | C) : E;
update(model: E) : E;
save(model: E | C): E;
}
我想合并这两种情况:
- create 和 update 共享相同的接口,其中实体(称为
E
) id 与属性 nameId
。这个 id 是通用的(称为它I
),它的类型是I | null | undefined
. 该接口因此而扩展MaybeEntity<I>
。 - 创建和更新接受不同的接口。使用 ceate 函数时,它应该接受不存在
C extends NotEnity
的接口,或者返回一个. 更新只接受必须在的地方Id
null
undefined
E
E extends Entity<I>
Id
I
我已经尝试过这些类型,但我失败了
export type Id = 'id';
export type Entity<I> = Record<Id, I>;
export type NotEntity = Partial<Record<Id, null>>;
export type MaybeEntity<I> = Partial<Record<Id, I | null >>;
class HttpService<I, E extends MaybeEntity<I>, C extends NotEntity = (E & NotEntity )> {
create(model: C | E & NotEntity) { }
update(model: E & Entity<I>) {}
save(model: C | E) {
return model.id === undefined && model.id === null
? this.create(model)
: this.update(model);
}
}