【问题标题】:JsonSchema: how to create schema for inclusive array type?JsonSchema:如何为包含数组类型创建模式?
【发布时间】:2021-04-29 12:27:30
【问题描述】:

考虑以下类型:

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 }]
}

【问题讨论】:

    标签: typescript jsonschema ajv


    【解决方案1】:

    您的代码正在运行。您发现了 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 问题跟踪器打开错误以在他们这边进行修复。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-12-31
      • 1970-01-01
      • 2020-12-20
      • 1970-01-01
      • 2023-03-23
      • 1970-01-01
      • 2019-02-20
      • 2020-12-11
      相关资源
      最近更新 更多