无默认值泛型
export interface BaseResponse<T> {
code: number;
message: string;
errorCode?: string;
data: T;
}
使用要求
必须明确 data 是什么类型
// 第一步:必须先指定 T 的类型,否则定义都报错
type CalorieResponse = BaseResponse<CalorieEstimationRawResponse>;
// 第二步:解析数据时,data 自动是 CalorieEstimationRawResponse 类型
const res: CalorieResponse = await response.json();
res.data.id; // ✅ 编辑器自动提示 id/user_id 等字段,写错立即报错
带默认值泛型
export interface BaseResponse<T = object> {
code: number;
message: string;
errorCode?: string;
data: T; // 泛型占位符,不指定则默认是 object 类型
}
使用要求
可选指定 T 的类型,不指定则自动使用默认值 `object`;
可直接写 `BaseResponse`(此时 T = object),也可写 `BaseResponse<具体类型>`。
// 用法1:精准使用(指定 T 的类型,推荐)
type CalorieEstimationFullResponse = BaseResponse<CalorieEstimationRawResponse>;
const fullResponse: CalorieEstimationFullResponse = await response.json();
fullResponse.data.id; // ✅ 有字段提示,精准无错
// 用法2:偷懒使用(不指定 T,用默认 object)
type CalorieEstimationFullResponse = BaseResponse; // T = object
const fullResponse: CalorieEstimationFullResponse = await response.json();
fullResponse.data.id; // ❌ 无字段提示,写错不报错(失去类型安全)