通过 TypeScript,tRPC 可以自动推断你的 API 类型。这意味着你不需要手动编写类型定义,tRPC 会根据你的实现自动生成类型。结合例子具体详细解释一下
时间: 2024-11-12 13:39:30 浏览: 16
TypeScript 和 tRPC (thin REST client protocol) 的集成使得服务端返回的数据结构和客户端期望的数据类型可以无缝匹配。当你使用 tRPC 客户端调用服务时,TypeScript 自动分析服务的元数据(通常是 JSON Schema 或 GraphQL schema),然后生成相应的接口定义。
举个例子:
```typescript
// 假设我们有一个简单的 REST API,提供 `users` 资源的操作
// tRPC 服务器端可能有如下定义:
const userSchema = {
type: 'object',
properties: {
id: { type: 'integer', description: '用户ID' },
name: { type: 'string', description: '用户名' },
email: { type: 'string', format: 'email', description: '用户邮箱' }
},
};
// 使用 tRPC,你可以创建如下的客户端函数:
import { createClient } from '@trpc/client';
interface UsersService {
createUser: ({ name: string, email: string }) => Promise<{ id: number }> | Error;
getUserById: (id: number) => Promise<{ ...userSchema }>;
}
const trpc = createClient({
url: 'https://api.example.com/trpc',
types: {
// Type definitions are automatically generated based on the server's schema
User: userSchema,
},
});
// 现在,当我们尝试调用这些方法,TypeScript 就会提供类型检查:
try {
const newUser = await trpc.users.createUser({ name: 'Alice', email: 'alice@example.com' });
console.log(newUser.id); // 用户ID会被正确地识别为数字类型
} catch (error) {
console.error(error);
}
// 同样,getUserById 返回的对象将自动符合我们在 User 接口中定义的类型
const user = await trpc.users.getUserById(1);
console.log(user.name); // 类型安全,不会因为误输入字符串而引发错误
```
阅读全文