chore: bump version to 0.0.46 and enhance type inference for JSON Schema required fields
This commit is contained in:
@@ -25,18 +25,35 @@ type InferFromJSONSchema<T> =
|
||||
T extends { type: "number" } ? number :
|
||||
T extends { type: "integer" } ? number :
|
||||
T extends { type: "boolean" } ? boolean :
|
||||
// 对象类型 - 检查是否有 properties
|
||||
T extends { type: "object"; properties: infer P }
|
||||
? {
|
||||
[K in keyof P]: InferFromJSONSchema<P[K]>
|
||||
}
|
||||
: // 数组类型
|
||||
// 数组类型
|
||||
T extends { type: "array"; items: infer I }
|
||||
? Array<InferFromJSONSchema<I>>
|
||||
: // 对象类型 - 带 required 字段(必需字段 + 可选字段)
|
||||
// 注意:必须在 additionalProperties 检查之前,因为两者可能同时存在
|
||||
T extends { type: "object"; properties: infer P; required: infer R extends readonly string[] }
|
||||
? {
|
||||
[K in keyof P as K extends R[number] ? K : never]: InferFromJSONSchema<P[K]>
|
||||
} & {
|
||||
[K in keyof P as K extends R[number] ? never : K]?: InferFromJSONSchema<P[K]>
|
||||
}
|
||||
: // 对象类型 - 不带 required 字段(所有字段可选)
|
||||
T extends { type: "object"; properties: infer P }
|
||||
? {
|
||||
[K in keyof P]?: InferFromJSONSchema<P[K]>
|
||||
}
|
||||
: // 对象类型 - 只有 additionalProperties(纯动态对象)
|
||||
T extends { type: "object"; additionalProperties: infer A }
|
||||
? (A extends false ? Record<string, never> : Record<string, any>)
|
||||
: // 默认情况 - 如果是对象但没有 type 字段,尝试递归推断
|
||||
T extends Record<string, any>
|
||||
? T extends { properties: infer P }
|
||||
? { [K in keyof P]: InferFromJSONSchema<P[K]> }
|
||||
? T extends { properties: infer P; required: infer R extends readonly string[] }
|
||||
? {
|
||||
[K in keyof P as K extends R[number] ? K : never]: InferFromJSONSchema<P[K]>
|
||||
} & {
|
||||
[K in keyof P as K extends R[number] ? never : K]?: InferFromJSONSchema<P[K]>
|
||||
}
|
||||
: T extends { properties: infer P }
|
||||
? { [K in keyof P]?: InferFromJSONSchema<P[K]> }
|
||||
: unknown
|
||||
: unknown;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user