在 Typescript 中使用 AJV 验证枚举

Validating enums with AJV in Typescript

假设我有这样的界面和架构:

enum FooEnum {
  Bar = 'BAR',
}

interface Foo {
  enumValue: FooEnum.Bar
}

const schema = JSONSchemaType<Foo> = {
  type: 'object',
  properties: {
    enumValue: {
      const: Foo[FooEnum.Bar]
    }
  }
}

这会失败,因为打字稿会抱怨这些不是同一类型。

两个(相关)问题:

  1. 如何在架构中使用 AJV 和 Typescript 以及常量值?即使枚举被替换为字符串文字,Typescript 也会抱怨(参见:https://github.com/ajv-validator/ajv/issues/1984

  2. AJV 能否将输入枚举值解析为它们应该作为实际枚举类型出现?如果是这样,我该如何设置该行为?

第一个问题的答案最终很简单:我需要为 jsonschema 中的 const 值指定一个类型。

constantValue: { type: 'string', const: 'FOO' }

第二个好像不行。