Drizzle TeamDT
Drizzle Team3y ago
9 replies
iolyd

Less verbose generic types for helper functions

Trying to implement various helper functions to join or filter data, I keep facing the need to add quite verbose generic types whenever I want to handle subqueries and/or selections alongside tables. Are there type helpers I'm unaware of that could make things a bit more straightforward? Here's an example illustrating what I mean:
export function withTranslations<
  T extends AnyTable<TableConfig> | PgSelect | Subquery,
  TT extends (AnyTable<TableConfig> | PgSelect | Subquery) & {
    [K in keyof TranslationLangColumn]: AnyColumn;
  },
  PK extends T extends Table
    ? ValueOf<T['_']['columns']>
    : T extends PgSelect
      ? ValueOf<T['_']['selectedFields']>
      : T extends Subquery
        ? ValueOf<T['_']['selectedFields']>
        : never,
  FK extends TT extends Table
    ? ValueOf<TT['_']['columns']>
    : TT extends PgSelect
      ? ValueOf<TT['_']['selectedFields']>
      : TT extends Subquery
        ? ValueOf<TT['_']['selectedFields']>
        : never,
>(
  selection: T,
  translationsSelection: TT,
  relation: [PK, FK] | ((selection: T, translationsSelection: TT) => [PK, FK])
) {
  //...
}

I could implement some type helpers of my own, but was wondering if anything was already included in
drizzle-orm
Was this page helpful?