TypeScript API调用工具使用泛型时出现未读取T的错误求助
解决TypeScript泛型未使用错误
错误原因
requests.get中声明的泛型<T>未在函数的参数、返回值或内部逻辑中被使用,TypeScript会检测到这种冗余泛型并抛出错误。同时原代码中泛型未在responseBody和requests.get之间建立关联,泛型优化未起到实际作用。
修正方案
- 重构响应类型接口:使用带泛型的接口明确响应体的类型关联
- 让泛型贯穿整个调用链:将
requests.get的泛型传递给responseBody,并指定返回类型 - 移除冗余any类型:利用泛型实现类型安全,替代模糊的
any
修正后的完整代码
// 定义带泛型的API响应接口,明确body的类型 interface ApiResponse<T> { body: T; } // responseBody函数接收泛型响应,返回指定类型的body const responseBody = <T>(response: ApiResponse<T>): T => response.body; const requests = { // 声明泛型T,指定返回类型为Promise<T>,并将T传递给responseBody get: <T>(url: string): Promise<T> => getGraphClient().api(url).get().then(responseBody<T>) } const Activities = { // 调用时指定泛型为Activity[],返回Promise<Activity[]> list: () => requests.get<Activity[]>(academicCalendarURL) } const agent = { Activities } export default agent;
关键改动说明
ApiResponse<T>接口让响应体的body类型与泛型绑定,避免any的模糊性requests.get的泛型<T>被用于指定返回的Promise<T>类型,同时传递给responseBody<T>,解决了泛型未使用的问题- 整个调用链从
requests.get<Activity[]>到responseBody再到最终返回值,类型完全一致,实现了类型安全的API调用
内容的提问来源于stack exchange,提问作者Bryan Dellinger
相关产品推荐
相关产品推荐

