我们正在使用 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]
否则,使用枚举的地方不会被各个包正确渲染。
您已经面临这个问题了吗?
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
关键字。