How to make function that takes in a table as parameter with correct types?

e.g. if we have the following function, which takes in an arbitrary table and executes a where clause on it:
typescript
import db from '../db'
import { type Table, type SQL, } from 'drizzle-orm'

function queryTable<T extends Table>(table: T, whereClause?: SQL<unknown>) {
let query = db.select().from(table)
if (whereClause) {
query = query.where(whereClause)
}
return query
}
typescript
import db from '../db'
import { type Table, type SQL, } from 'drizzle-orm'

function queryTable<T extends Table>(table: T, whereClause?: SQL<unknown>) {
let query = db.select().from(table)
if (whereClause) {
query = query.where(whereClause)
}
return query
}
I get the following error ("drizzle-orm": "0.39.1"): Argument of type 'T' is not assignable to parameter of type 'TableLikeHasEmptySelection<T> extends true ? DrizzleTypeError<"Cannot reference a data-modifying statement subquery if it doesn't contain a returning clause"> : T'. Type 'Table<TableConfig<Column<any, object, object>>>' is not assignable to type 'TableLikeHasEmptySelection<T> extends true ? DrizzleTypeError<"Cannot reference a data-modifying statement subquery if it doesn't contain a returning clause"> : T'
2 Replies
François
François3d ago
This is a bug and was already reported. If you search for a quick fix: Downgrade back to 0.38.
iamgengar.
iamgengar.OP3d ago
Thank you for the quick reply

Did you find this page helpful?