包含所有关系的完整模型类型。
type UserFullType = Prisma.UserGetPayload<{ select: { [K in keyof Required<Prisma.UserSelect>]: true } }>
您也可以创建地图以提高使用方便性。
interface SelectMap {
User: Prisma.UserSelect
Post: Prisma.PostSelect
}
interface PayloadMap<S extends (string | number | symbol)> {
User: Prisma.UserGetPayload<{ [K in S]: true }>
Post: Prisma.PostGetPayload<{ [K in S]: true }>
}
type FullModel<M extends keyof SelectMap, S = Required<SelectMap[M]>> = PayloadMap<keyof S>[M]
使用方法
const user: FullModel<'User'>
更新
这是一种解决方法,使得使用Model类型作为泛型成为可能。
type ValueOf<T> = T[keyof T]
type PickByValue<T, V extends T[keyof T]> = { [ K in Exclude<keyof T, ValueOf<{ [ P in keyof T ]: T[P] extends V ? never : P }>> ]: T[K] }
type KeyOfValue<T, V extends T[keyof T]> = keyof PickByValue<T, V>
type PickValueByKey<T, K> = K extends keyof T ? T[K] : never
interface ModelMap {
Article: Article
User: User
}
interface SelectMap {
Article: Prisma.ArticleSelect
User: Prisma.UserSelect
}
interface PayloadMap<S extends (string | number | symbol)> {
Article: Prisma.ArticleGetPayload<{ select: { [K in S]: true } }>
User: Prisma.UserGetPayload<{ select: { [K in S]: true } }>
}
type FullModelType<M extends ValueOf<ModelMap>, N = KeyOfValue<ModelMap, M>, S = Required<PickValueByKey<SelectMap, N>>> = PickValueByKey<PayloadMap<keyof S>, N>
const article: FullModelType<Article> = {}