Fastify Swagger 未按预期管理枚举器

问题描述 投票:0回答:1

我们正在使用 Fastify 开发后端,使用 Typebox 声明模式并使用 Fastify Swagger 生成 OpenApi 定义 在文档生成过程中,我们面临一些枚举或类似问题

假设我们通过以下方式之一声明一个类型框枚举器

export const ProviderType = Type.Union([
  Type.Literal("sms"),
  Type.Literal("email"),
]);

//OR

enum Providers {
  SMS = "sms",
  EMAIL = "email",
}

export const ProviderType = Type.Enum(Providers);

当生成开放 API 文档时,我们得到这个

- schema:
    anyOf:
        - type: string
          enum:
              - sms
        - type: string
          enum:
              - email

这不是我们所期望的,而是类似的东西

schema:
    type: string
    enum: [sms, email]

否则,使用枚举的地方不会被各个包正确渲染。

您已经面临这个问题了吗?

openapi fastify fastify-swagger
1个回答
1
投票

TypeBox 项目不支持

enum
ATM,正如首席维护者所说。

它建议了一个解决方法:

const StringEnum = <T extends string[]>(items: [...T]) =>
  Type.Unsafe<T[number]>({ type: "string", enum: items });

export const ProviderType = StringEnum(["email", "sms"]);

// BECOMES
 - schema:
            type: string
            enum:
              - email
              - sms

因此

fastify-swagger
将使用
enum
关键字。

© www.soinside.com 2019 - 2024. All rights reserved.