redis / redis-om-node

Object mapping, and more, for Redis and Node.js. Written in TypeScript.
MIT License
1.17k stars 78 forks source link

Make Repository a generic class / infer Entity from Schema #227

Open jonahschueller opened 8 months ago

jonahschueller commented 8 months ago

It seems like the current version of redis-om does not have any support for a custom repository entity type. Apparently, the Entity type is hard coded into the Repository class (correct me if I am wrong).

I think this is a good point to introduce some Typescript Generics support.

I am thinking of something like this:

interface Person extends Entity {
   name: string
   age: number
}

const PersonSchema = new Schema(...)

const personRepo = new Repository<Person>(PersonSchema, client)

With this approach, the save, fetch, ... functions of the repository would give proper IntelliSense.

I assume the changes wouldn't be too much. Something like:


class Repository<E extends Entity = Entity> {

   async save(entity: E)

   ...

}

A more advanced approach would be to infer the resulting entity type from the Schema definition. However, this would need a lot of refactoring of the type definitions.

Eji4h commented 7 months ago

I had the same issue.

AlaaZorkane commented 7 months ago

Seems like a no brainer, I don't know why this wasn't implemented on the first place. +1

Wato1818 commented 6 months ago

It would be very useful. But i feel the improvement may be way more complex than we think. +1

dennisofficial commented 3 months ago

I feel like this should be the norm. TypeScript is for strict typing, I can't type an Entity