类型定义
概述
类型定义是跨功能包共享的数据结构定义。
定义类型
数据模型
typescript
// shared/types/UserTypes.ets
export interface UserInfo {
id: string;
username: string;
email: string;
avatar?: string;
phone?: string;
createdAt: Date;
updatedAt: Date;
}
export interface UserProfile extends UserInfo {
bio?: string;
location?: string;
website?: string;
}枚举类型
typescript
// shared/types/CommonTypes.ets
export enum UserRole {
Admin = "admin",
User = "user",
Guest = "guest"
}
export enum OrderStatus {
Pending = "pending",
Paid = "paid",
Shipped = "shipped",
Delivered = "delivered",
Cancelled = "cancelled"
}请求/响应类型
typescript
// shared/types/AuthTypes.ets
export interface LoginRequest {
username: string;
password: string;
rememberMe?: boolean;
}
export interface LoginResponse {
success: boolean;
token?: string;
userInfo?: UserInfo;
message?: string;
}
export interface RegisterRequest {
username: string;
email: string;
password: string;
confirmPassword: string;
}通用类型
typescript
// shared/types/CommonTypes.ets
export interface PageData<T> {
list: T[];
total: number;
page: number;
pageSize: number;
hasMore: boolean;
}
export interface ApiResponse<T> {
code: number;
message: string;
data?: T;
}使用类型
在服务中使用
typescript
import { UserInfo, LoginRequest, LoginResponse } from "@shared/types";
export class AuthService {
async login(request: LoginRequest): Promise<LoginResponse> {
const response = await this.httpClient.post<LoginResponse>("/auth/login", request);
return response.data;
}
async getUserInfo(userId: string): Promise<UserInfo> {
const response = await this.httpClient.get<UserInfo>(`/users/${userId}`);
return response.data;
}
}在 ViewModel 中使用
typescript
import { UserInfo } from "@shared/types";
import { BaseNetWorkViewModel } from "@core/base";
@ObservedV2
export class UserProfileViewModel extends BaseNetWorkViewModel<UserInfo> {
protected requestRepository(): Promise<NetworkResult<UserInfo>> {
return this.userService.getUserInfo("123");
}
}类型组织
按领域组织
shared/types/
├── UserTypes.ets # 用户相关类型
├── AuthTypes.ets # 认证相关类型
├── ProductTypes.ets # 产品相关类型
├── OrderTypes.ets # 订单相关类型
└── CommonTypes.ets # 通用类型导出类型
typescript
// shared/types/index.ets
export * from "./UserTypes";
export * from "./AuthTypes";
export * from "./ProductTypes";
export * from "./OrderTypes";
export * from "./CommonTypes";最佳实践
1. 使用接口而不是类型别名
typescript
// 推荐
export interface UserInfo {
id: string;
name: string;
}
// 不推荐(除非有特殊需求)
export type UserInfo = {
id: string;
name: string;
};2. 使用可选属性
typescript
export interface UserInfo {
id: string;
name: string;
email: string;
avatar?: string; // 可选属性
phone?: string; // 可选属性
}3. 使用泛型
typescript
export interface PageData<T> {
list: T[];
total: number;
page: number;
pageSize: number;
}
// 使用
const userPage: PageData<UserInfo> = {
list: [],
total: 0,
page: 1,
pageSize: 20
};4. 使用类型继承
typescript
export interface BaseEntity {
id: string;
createdAt: Date;
updatedAt: Date;
}
export interface UserInfo extends BaseEntity {
username: string;
email: string;
}注意事项
- 命名规范:使用 PascalCase 命名接口和类型
- 文档注释:为复杂类型添加注释
- 类型安全:充分利用 TypeScript 的类型系统