How to type a Table

I want my data access layer to depend on my entities layer. I want to define a ts type for an entity, say a Student type, and then implement a drizzle table that's based off that type. Something like const studentTable = sqliteTable<Student>(...) would be perfect the syntax imo. I would expect this to throw errors if it was missing a field or incorrectly typed field. Is there a way to do this atm? Maybe a hack with drizzle-zod?
5 Replies
Andrii Sherman
Andrii Sherman7mo ago
I think you can use type DbLayerType = typeof table.$inferSelect and inferInsert if that's needed so you will pass mapped object from a database between entities and db layers which are always selected values = typeof table.$inferSelect and sometimes inferInsert, if it's objects passed to add some data to db
Andrii Sherman
Andrii Sherman7mo ago
Drizzle ORM - Goodies
Drizzle ORM is a lightweight and performant TypeScript ORM with developer experience in mind.
LiquiFruit
LiquiFruitOP7mo ago
Thanks for the help but Im not sure this is what Im looking for. I typed my data access layer function getAssociationByIdFromDb as the Promise<type of associations.$inferSelect | undefined> but it doesn't solve my issue as seen below.
LiquiFruit
LiquiFruitOP7mo ago
See how this function in my @/application layer doesnt mind returning the incorrect type? It correctly infers the type of my query fn in my data access layer as having a content: string field, but it thinks its returning AsyncTaskResult<Association> which doesn't have the content: string field. This is why I want an error to occur in my table definition as I modify some type in my @/entities layer
No description
No description
No description
LiquiFruit
LiquiFruitOP7mo ago
Im pretty sure this is a typescript skill issue but I think being able to define the type of a table as Im writing it would help. I would settle for a hack using associations.$inferSelect and Associations where it checks if theyre equal somehow
Want results from more Discord servers?
Add your server