During review of #448, we considered simplifying several interfaces/types related to UserDatabase.
export interface UserDatabase {
transaction<R, T extends unknown[]>(transactionFunction: UserDatabaseTransaction<R, T>, config: TransactionConfig, ...args: T): Promise<R>;
queryFunction<C extends UserDatabaseClient, R, T extends unknown[]>(queryFunction: UserDatabaseQuery<C, R, T>, ...params: T): Promise<R>;
query<R, T extends unknown[]>(sql: string, ...params: T): Promise<R[]>;
queryWithClient<R, T extends unknown[] = unknown[]>(client: UserDatabaseClient, sql: string, ...params: T): Promise<R[]>;
// other members omitted for clarity
}
type UserDatabaseQuery<C extends UserDatabaseClient, R, T extends unknown[]> = (ctxt: C, ...args: T) => Promise<R>;
type UserDatabaseTransaction<R, T extends unknown[]> = (ctxt: UserDatabaseClient, ...args: T) => Promise<R>;
Having a type argument T extending unknown[] doesn't provide much value. I think this type argument could be removed, simplifying the definitions. The new definitions would look something like this:
During review of #448, we considered simplifying several interfaces/types related to UserDatabase.
Having a type argument T extending unknown[] doesn't provide much value. I think this type argument could be removed, simplifying the definitions. The new definitions would look something like this: