Files
query/test/json-schema-examples.ts

165 lines
3.6 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import { createQueryApi } from '../src/query-api.ts';
// ============ 示例 1: 基础 JSON Schema 推断 ============
const api1 = {
"user": {
"get": {
"path": "user",
"key": "get",
"metadata": {
"args": {
"userId": {
"type": "string"
},
"includeProfile": {
"type": "boolean"
}
}
}
}
}
} as const;
const queryApi1 = createQueryApi({ api: api1 });
// ✅ 类型推断正常工作
queryApi1.user.get({
userId: '123', // ✅ 推断为 string
includeProfile: true // ✅ 推断为 boolean
});
// ❌ TypeScript 会报错
// queryApi1.user.get({
// userId: 123, // 错误:应该是 string
// wrongProp: 'test' // 错误:不存在的属性
// });
// ============ 示例 2: 嵌套对象 JSON Schema你的场景============
const api2 = {
"app_domain_manager": {
"get": {
"path": "app_domain_manager",
"key": "get",
"metadata": {
"args": {
"data": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"id": {
"type": "string"
},
"domain": {
"type": "string"
}
}
}
}
}
}
}
} as const;
const queryApi2 = createQueryApi({ api: api2 });
// ✅ 类型推断正常工作 - data 参数被推断为 { id: string, domain: string }
queryApi2.app_domain_manager.get({
data: {
id: '123',
domain: 'example.com'
}
});
// ❌ TypeScript 会报错
// queryApi2.app_domain_manager.get({
// data: {
// wrongProp: 'test' // 错误:不存在的属性
// }
// });
// ============ 示例 3: 复杂嵌套结构 ============
const api3 = {
"product": {
"create": {
"path": "product",
"key": "create",
"metadata": {
"args": {
"product": {
"type": "object",
"properties": {
"name": { "type": "string" },
"price": { "type": "number" },
"tags": {
"type": "array",
"items": { "type": "string" }
},
"metadata": {
"type": "object",
"properties": {
"color": { "type": "string" },
"size": { "type": "string" }
}
}
}
}
}
}
}
}
} as const;
const queryApi3 = createQueryApi({ api: api3 });
// ✅ 复杂嵌套类型推断
queryApi3.product.create({
product: {
name: 'T-Shirt',
price: 29.99,
tags: ['clothing', 'summer'],
metadata: {
color: 'blue',
size: 'M'
}
}
});
// ============ 示例 4: 枚举类型 ============
const api4 = {
"order": {
"updateStatus": {
"path": "order",
"key": "updateStatus",
"metadata": {
"args": {
"orderId": { "type": "string" },
"status": {
"type": "string",
"enum": ["pending", "processing", "shipped", "delivered"] as const
}
}
}
}
}
} as const;
const queryApi4 = createQueryApi({ api: api4 });
// ✅ 枚举类型推断
queryApi4.order.updateStatus({
orderId: 'ORD-123',
status: 'shipped' // ✅ 自动提示: "pending" | "processing" | "shipped" | "delivered"
});
// ❌ TypeScript 会报错
// queryApi4.order.updateStatus({
// orderId: 'ORD-123',
// status: 'invalid-status' // 错误:不在枚举值中
// });
console.log('✅ 所有类型推断示例运行成功!');