arkts-泛型写法

无默认值泛型

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; // ❌ 无字段提示,写错不报错(失去类型安全)