Existuje způsob, jak dělat vnořené generické omezení v TypeScriptu?
Řekněte, že mám následující třídy:
abstract class Id { ... }
abstract class Entity<TId extends Id>{ ... }
class ProductId extends Id { ... }
class ProductEntity extends Entity<ProductId> { ... }
a chtěl jsem vytvořit třídu takto:
class GenericRepository<TEntity extends Entity<TId extends Id>> {
update(entity: TEntity): void { ... }
get(id: TId): TEntity { ... }
}
Je to možné bez toho, aniž byste dělali něco jako:
class GenericRepository<TEntity extends Entity<TId>, TId extends Id> {
update(entity: TEntity): void { ... }
get(id: TId): TEntity { ... }
}
moci zavolat:
const foobar = new GenericRepository<ProductEntity>();
místo:
const foobar = new GenericRepository<ProductEntity, ProductId>();
a aby to nějak omezovalo hodnotu jak pro Entity, tak pro Id?
Jinými slovy, potřebuji mít vnořený omezení.