typescript - Prisma + Nest JS, vilken typ av Promise ska jag använda?
Vilken typ ska jag använda inuti Promise (istället för ?)? Jag vet inte exakt vad som kommer att returneras, på grund av det andra argumentet - UserSelect.
async getOneUser(where: Prisma.UserWhereUniqueInput, userSelect?: Prisma.UserSelect):Promise<?> {
const user = await this.prisma.user.findUnique({ where, select: { ...userSelect } })
return user
}
Jag vill kunna välja specifika fält att skicka med i select-satsen, istället för att skicka med alla som standard.
Svar #1
Jag skapade typ med alla möjliga val och använder den sedan med Partial inuti Promise. Jag tycker att det är det bästa alternativet:
export type UserFullType = Prisma.UserGetPayload<{ select: { [K in keyof Required<Prisma.UserSelect>]: true } }>
async getOneUser(
where: Prisma.UserWhereUniqueInput,
userSelect: Prisma.UserSelect = {}
): Promise<Partial<UserFullType>> {
const user = await this.prisma.user.findUnique({ where, select: { ...userSelect } })
return user
}
hittade användbar information i den här artikeln
Svar #2
du kan använda any eller Partial<T>
// here I decide to use Partial<User> as return
async getOneUser(
where: Prisma.UserWhereUniqueInput,
userSelect: Prisma.UserSelect,
): Promise<Partial<User>> {
const user = await this.prisma.user.findUnique({
where,
select: { ...userSelect },
});
return user as Partial<User>;
}
och vi kan kalla det på följande sätt
// here I use uuid
await this.userService.getOneUser(
{ id: '064c1764-1ab0-4936-a735-e764fbfaa84e' },
{ id: true, _count: true, name: true },
);
