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



考虑以下类型:

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

它的模式会是什么样子?这是我当前失败的尝试:
<编辑:此代码适用于ajv: ^8.2.0。我打开这篇文章时使用了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问题跟踪器打开bug,在他们这边修复它。

最新更新