JsonSchema:如何为包含数组类型创建模式?

JsonSchema: how to create schema for inclusive array type?

考虑以下类型:

type oneOfTwoPossibleArrays = 
    | [1, 2]
    | [3, 4]

它的架构是什么样的?这是我目前失败的尝试:
<编辑:此代码适用于 ajv: ^8.2.0。我打开这个post的时候用的是7.2.6.>

const schema: JSONSchemaType<oneOfTwoPossibleArrays> = {
    oneOf: [
        {
            type: 'array',
            minItems: 2,
            maxItems: 2,
            items: [{ type: 'number', const: 1 }, { type: 'number', const: 2 }]
        },
        {
            type: 'array',
            minItems: 2,
            maxItems: 2,
            items: [{ type: 'number', const: 3 }, { type: 'number', const: 4 }]
        }
    ]
}

出于某种原因,仅在架构中定义一个数组不会生成打字稿错误:

const schema: JSONSchemaType<oneOfTwoPossibleArrays> = {
    type: 'array',
    minItems: 2,
    maxItems: 2,
    items: [{ type: 'number', const: 1 }, { type: 'number', const: 2 }]
}

您的代码正在运行。您遇到了 Ajv Typescript 支持无法编译您的代码的边缘情况:

// @ts-ignore.   // <<<<<----- ADD THIS LINE
const schema: JSONSchemaType<oneOfTwoPossibleArrays> = {
    oneOf: [
        {
            type: 'array',
            minItems: 2,
            maxItems: 2,
            items: [{ type: 'number', const: 1 }, { type: 'number', const: 2 }]
        },
        {
            type: 'array',
            minItems: 2,
            maxItems: 2,
            items: [{ type: 'number', const: 3 }, { type: 'number', const: 4 }]
        }
    ]
}

您可以向 Ajv github 问题跟踪器打开错误以在他们这边修复它。