假设我有两个表:A
和B
,每一行类型为
type ARow = {
primaryId: number;
name: string
};
type BRow = {
foreignId: number;
name: string;
}
Knex足够聪明,可以推断出从每个表中选择结果的类型:
// aList is inferred to be of type { primaryId: number, name: string }[]
const aList = await knex<ARow>("a").select("primaryId", "name")
这甚至可以通过混叠来实现(只要我们只引用列名而不是表):
// aList is inferred to be of type { id: number, description: string }[]
const aList = await knex<ARow>("a").select({
id: "primaryId",
description: "name",
})
然而,A
和B
都有一个name
,我想单独别名:
// joined is inferred to be of type { id: any, aName: any, bName: any }[]
const joined = await knex<ARow>("a")
.join<BRow>("b", "primaryId", "foreignId")
.select({
id: "primaryId",
aName: "a.name",
bName: "b.name",
})
在基于表的混叠列时是否有保留类型安全的方法?
const joined = knex<ARow>("a")
.join<BRow>("b", "primaryId", "foreignId")
.select(
knex.ref("primaryId"),
knex.ref("name").as("aName").withSchema("a"),
knex.ref("name").as("bName").withSchema("b")
);