所以我将 Prisma orm 连接到 Graphql Nexus 并且需要转换为 T | 的 graphql args 空 | 未定义到 T | Prisma 接受的 undefined 。
这是在 Nexus 中的操作方式https://github.com/graphql-nexus/nexus-plugin-prisma/blob/6c8801c6e1d99bfdb73a7c1c89db9607712b0e01/src/null.ts
这如何适应我的需要?
所以我将 Prisma orm 连接到 Graphql Nexus 并且需要转换为 T | 的 graphql args 空 | 未定义到 T | Prisma 接受的 undefined 。
这是在 Nexus 中的操作方式https://github.com/graphql-nexus/nexus-plugin-prisma/blob/6c8801c6e1d99bfdb73a7c1c89db9607712b0e01/src/null.ts
这如何适应我的需要?
你可以做这样的事情
const isPlainObject = (value: unknown): value is PlainObj =>
typeof value === "object" && value !== null && !Array.isArray(value);
export type DeNullify<T> = T extends null
? undefined
: T extends { [key: string]: any }
? { [K in keyof T]: DeNullify<T[K]> }
: T;
export const deNullify = <T>(src: T): DeNullify<T> => {
if (src === null) return undefined as DeNullify<T>;
if (isPlainObject(src)) {
const obj = Object.create(null);
for (const [key, value] of Object.entries(src)) {
obj[key] = deNullify(value);
}
return obj;
}
return src;
};
const obj = deNullify({ a: 1, b: 2, c: undefined, d: null }) // { a: 1, b: 2, c: undefined, d: undefined }
更新:我最终将它发布到 NPM。你可以安装它npm install dnull