typescript 中封装一个 class 来解析接口响应数据

时间:2024-10-22 21:58:42

在TypeScript中,封装一个类来解析接口响应数据是一个常见的做法,它允许你将与接口响应相关的逻辑封装在一个可复用的单元中。下面是一个示例,展示了如何定义一个TypeScript类来解析一个假设的API接口响应数据。

首先,我们定义一个接口来描述从API接收到的数据形状:

interface UserData {
    id: number;
    name: string;
    email: string;
    // 可以根据需要添加更多属性
}

然后,我们创建一个类UserResponseParser,它接收一个符合UserData接口的对象作为输入,并提供方法来访问或处理这些数据:

class UserResponseParser {
    private userData: UserData; // 使用private来限制外部直接访问

    constructor(rawData: UserData) {
        if (!rawData || typeof rawData !== 'object') {
            throw new Error('Invalid raw data provided to UserResponseParser');
        }
        this.userData = rawData;
    }

    // 公开一个方法来获取用户的名字
    getName(): string {
        return this.userData.name;
    }

    // 公开一个方法来获取用户的邮箱
    getEmail(): string {
        return this.userData.email;
    }

    // 可以根据需要添加更多方法

    // 例如,一个方法用于获取用户的完整信息(以字符串形式)
    getUserInfoAsString(): string {
        return `User ID: ${this.userData.id}, Name: ${this.userData.name}, Email: ${this.userData.email}`;
    }
}

// 示例用法
const rawUserData: UserData = {
    id: 1,
    name: 'John Doe',
    email: 'john.doe@example.com'
};

try {
    const userParser = new UserResponseParser(rawUserData);
    console.log(userParser.getName()); // 输出: John Doe
    console.log(userParser.getEmail()); // 输出: john.doe@example.com
    console.log(userParser.getUserInfoAsString()); // 输出: User ID: 1, Name: John Doe, Email: john.doe@example.com
} catch (error) {
    console.error('Error parsing user data:', error.message);
}

在这个例子中,UserResponseParser类有一个私有属性userData,它存储了从API接收到的原始数据。构造函数接受一个UserData类型的参数,并将其存储在userData属性中。然后,类提供了几个公开的方法来访问这些数据,如getNamegetEmail。此外,还提供了一个getUserInfoAsString方法来将用户的完整信息格式化为一个字符串。

通过使用TypeScript,我们得到了类型安全和自动完成等好处,这有助于减少错误并提高开发效率。同时,将逻辑封装在类中也有助于保持代码的模块化和可重用性。

相关文章