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

@@ -161,4 +161,115 @@ queryApi4.order.updateStatus({
// });
// ============ 示例 5: Object 类型 - 带 required 字段 ============
const api5 = {
"domain_manager": {
"update": {
"path": "domain_manager",
"key": "update",
"metadata": {
"args": {
"data": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"id": { "type": "string" },
"domain": { "type": "string" },
"appId": { "type": "string" },
"status": {
"type": "string",
"enum": ["active", "inactive"] as const
},
"config": {
"type": "object",
"properties": {
"ssl": { "type": "boolean" },
"cdn": { "type": "boolean" }
}
}
},
"required": ["domain"] as const, // 只有 domain 是必需的
"additionalProperties": false
}
}
}
},
"list": {
"path": "domain_manager",
"key": "list",
"metadata": {
"args": {
"data": {
"type": "object",
"properties": {
"page": { "type": "number" },
"pageSize": { "type": "number" },
"status": {
"type": "string",
"enum": ["active", "inactive"] as const
}
}
// 没有 required 字段,所以所有字段都是可选的
}
}
}
}
}
} as const;
const queryApi5 = createQueryApi({ api: api5 });
// ✅ 示例 5.1: 只传必需字段 domain
queryApi5.domain_manager.update({
data: {
domain: "example.com" // domain 是必需的
}
});
// ✅ 示例 5.2: 传必需字段 + 可选字段
queryApi5.domain_manager.update({
data: {
domain: "example.com", // 必需
id: "123", // 可选
appId: "app-001", // 可选
status: "active", // 可选,且只能是 "active" | "inactive"
config: { // 可选对象
ssl: true,
cdn: false
}
}
});
// ❌ 错误:缺少必需字段 domain
// queryApi5.domain_manager.update({
// data: {
// id: "123" // 错误:缺少必需字段 "domain"
// }
// });
// ✅ 示例 5.3: list 方法所有字段都是可选的
queryApi5.domain_manager.list({
data: {
page: 1,
pageSize: 10
}
});
// ✅ 示例 5.4: list 方法可以传空对象
queryApi5.domain_manager.list({
data: {}
});
// ✅ 示例 5.5: list 方法甚至可以不传参数
queryApi5.domain_manager.list();
// ============ 类型检查 ============
type UpdateParams = Parameters<typeof queryApi5.domain_manager.update>[0];
// 推断为: { data: { domain: string } & { id?: string, appId?: string, status?: "active" | "inactive", config?: {...} } }
type ListParams = Parameters<typeof queryApi5.domain_manager.list>[0];
// 推断为: { query?: { page?: number, pageSize?: number, status?: "active" | "inactive" } }
console.log('✅ 所有类型推断示例运行成功!');