【问题标题】:Recursively convert object items that are equal to null to undefined递归地将等于 null 的对象项转换为 undefined
【发布时间】:2021-09-18 18:49:30
【问题描述】:

所以我将 Prisma orm 连接到 Graphql Nexus 并且需要转换为 T | 的 graphql args空 |未定义到 T | Prisma 接受的 undefined。

这是在 Nexus https://github.com/graphql-nexus/nexus-plugin-prisma/blob/6c8801c6e1d99bfdb73a7c1c89db9607712b0e01/src/null.ts 中完成的方法

如何适应我的需要?

【问题讨论】:

  • 在这种情况下,您可以有一个帮助函数,它可以递归地对 GraphQL 中间件中的 args 执行相同的操作。
  • @Ryan 任何建议如何在 Typescript 中执行,我可以在 JS 中执行但它不会保留类型。
  • 我认为在这种情况下不能保留类型,因为您将 null 转换为 undefined 会破坏类型。因此,您要么需要进行一些我不熟悉的复杂 TypeScript 转换,要么将 args 保持不变并直接将它们传递给 Prisma。

标签: typescript graphql prisma nexus-prisma


【解决方案1】:

你可以这样做

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

【讨论】:

    猜你喜欢
    • 2021-07-29
    • 2020-07-19
    • 2020-12-06
    • 1970-01-01
    • 1970-01-01
    • 2022-06-22
    • 2023-02-06
    • 2021-12-07
    • 2020-08-15
    相关资源
    最近更新 更多