bounty将在6天后过期。回答此问题可获得+50的声望奖励。baitendbidz正在寻找规范答案。
给定以下ajv(v8.11.2)示例模式
import Ajv, { JSONSchemaType } from "ajv";
interface MyType {
myProp?: OtherType;
}
interface OtherType {
foo: string;
bar: number;
}
const otherSchema: JSONSchemaType<OtherType> = {
type: 'object',
properties: {
foo: { type: 'string', minLength: 1 },
bar: { type: 'number' },
},
required: ['foo', 'bar'],
additionalProperties: false
};
const mySchema: JSONSchemaType<MyType> = {
type: 'object',
properties: {
myProp: otherSchema,
},
required: [],
additionalProperties: false,
};
我收到以下错误
属性“$ref”的类型不兼容。请键入“string|“undefined”不能赋值给类型“string”。类型“undefined”不能赋值给类型“string”。
我认为这是因为TS不知道mySchema
的myProp
可能是未定义的,尽管它不存在于所需的数组中。
你有什么办法来修复这个模式吗?
2条答案
按热度按时间x0fgdtte1#
您应该能够执行以下操作:
下面是一个工作示例:
https://codesandbox.io/s/ajv-schema-json-nested-qu9e7q?file=/src/schemas.ts
llycmphe2#
正如在注解中提到的,我假设这是因为您在
MyType
中声明了myProp
的类型为OtherType
,但是当您声明模式时,您将JSONSchemaType<MyType>
类型的对象设置为该属性,并且TypeScript会告诉您类型不匹配,因为OtherType
不是JSONSchemaType<OtherType>
尝试将您的
MyType
调整为:虽然我从来没有使用过
ajv
包,也不知道JSONSchemaType
类型和它需要什么来实现。但我的回答应该涵盖您发布的错误