chore: bump version to 0.0.46 and enhance type inference for JSON Schema required fields

This commit is contained in:
2026-02-18 04:10:43 +08:00
parent 38659cc40e
commit ebfc779857
6 changed files with 739 additions and 13 deletions

View File

@@ -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;