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,
})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;
}[]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 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;
}[]const result: {
title: string;
description: string | null;
id: string;
... 20 more ...;
attributes: Record<...> | null;
}[]