Skip to content

类型定义

概述

类型定义是跨功能包共享的数据结构定义。

定义类型

数据模型

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;
}

注意事项

  1. 命名规范:使用 PascalCase 命名接口和类型
  2. 文档注释:为复杂类型添加注释
  3. 类型安全:充分利用 TypeScript 的类型系统

下一步