How to dynamically select columns in relation query with proper type inference ?

const result = await db.query.products.findMany({
    columns: {
      id: true,
      title: true,
      retailPrice: true,
      discount: true,
      price: true,
    },
    orderBy: orderBy,
    limit: perPage,
    offset: meta.offset,
  })

The above example generated following types
const result: {
    title: string;
    description: string | null;
    id: string;
    retailPrice: number;
    discount: number;
    price: number;
}[]

But if I use
const avalaibleColumns = ["id", "title", "price"]
const result = await db.query.products.findMany({
    columns: {
      id:  avalaibleColumns.includes("id"),
      title: avalaibleColumns.includes("title"),
      retailPrice: avalaibleColumns.includes("retailPrice"),
      discount: avalaibleColumns.includes("discount"),
      price: avalaibleColumns.includes("price"),
    },
    orderBy: orderBy,
    limit: perPage,
    offset: meta.offset,
  })

const result: {
    title: string;
    description: string | null;
    id: string;
    ... 20 more ...;
    attributes: Record<...> | null;
}[]
Was this page helpful?