MST

星途 面试题库

面试题:TypeScript 中组合优于继承的简单应用

假设有两个功能模块,一个是 `Logger` 用于记录日志,另一个是 `DataFetcher` 用于从 API 获取数据。请使用组合的方式,创建一个 `App` 类,使其具备记录获取数据操作日志的功能。请分别用 TypeScript 类和接口来实现相关类型定义。
42.4万 热度难度
前端开发TypeScript

知识考点

AI 面试

面试题答案

一键面试
// Logger接口定义
interface Logger {
    log(message: string): void;
}

// Logger实现类
class ConsoleLogger implements Logger {
    log(message: string) {
        console.log(message);
    }
}

// DataFetcher接口定义
interface DataFetcher {
    fetchData(): Promise<string>;
}

// DataFetcher实现类
class ApiDataFetcher implements DataFetcher {
    async fetchData() {
        // 模拟从API获取数据
        return "Mocked data from API";
    }
}

// App类,通过组合实现功能
class App {
    private logger: Logger;
    private dataFetcher: DataFetcher;

    constructor(logger: Logger, dataFetcher: DataFetcher) {
        this.logger = logger;
        this.dataFetcher = dataFetcher;
    }

    async run() {
        try {
            this.logger.log('开始获取数据');
            const data = await this.dataFetcher.fetchData();
            this.logger.log('数据获取成功: ' + data);
            return data;
        } catch (error) {
            this.logger.log('数据获取失败: ' + error.message);
            throw error;
        }
    }
}

// 使用示例
const logger = new ConsoleLogger();
const dataFetcher = new ApiDataFetcher();
const app = new App(logger, dataFetcher);
app.run().then(data => console.log('最终获取的数据:', data)).catch(error => console.error('运行App出错:', error));