考虑以下类型:
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,在他们这边修复它。