I manage to create a create
method but stuck on exists.
create is like this
import { InsertObject, SelectType } from "kysely";
import { db } from "./dataSource";
import { DB } from "app/src/dbTypes"
// type of table
type TE = keyof DB & string
// type of object to insert
type Insertable<T extends TE> = InsertObject<DB, T>;
export class BaseRepo {
static async create
<T extends TE, I extends Insertable<T>>
(item: I, table: T): Promise<SelectType<DB[T]["id"]> | undefined>
{
const result = await db()
.insertInto(table)
.values(item)
.returning('id')
.executeTakeFirst()
return result?.id
}
}
My attempt to create exists
is like this
static async exists<T extends TE>(table: T, column: ReferenceExpression<DB, T>, value: any) {
const result = await db()
.selectFrom(table)
.select(eb => eb.fn.countAll<number>().as('num'))
.where(column, '=', value)
.limit(1)
.executeTakeFirstOrThrow()
return result.num > 0
}
problem is I cannot find the correct type for column. Error is like this;
Argument of type 'ReferenceExpression<DB, T>' is not assignable to parameter of type 'ReferenceExpression<DB, ExtractTableAlias<DB, T>>'.
Type 'AnyColumnWithTable<DB, T>' is not assignable to type 'ReferenceExpression<DB, ExtractTableAlias<DB, T>>'.
Type '`auth.users.${string}`' is not assignable to type 'ReferenceExpression<DB, ExtractTableAlias<DB, T>>'.ts(2345)
(parameter) column: ReferenceExpression<DB, T>
How can I implement this method correctly?