MST

星途 面试题库

面试题:TypeScript装饰器的依赖注入实现

假设你有一个`UserService`类用于处理用户相关业务逻辑,现在要求通过TypeScript装饰器实现依赖注入,将`UserService`实例注入到另一个`Controller`类的某个方法中,使得该方法能够使用`UserService`的功能。请给出完整的代码实现。
23.1万 热度难度
前端开发TypeScript

知识考点

AI 面试

面试题答案

一键面试
// 定义UserService类
class UserService {
    getUserInfo() {
        return "User information";
    }
}

// 定义依赖注入装饰器
function injectUserService(target: any, propertyKey: string, descriptor: PropertyDescriptor) {
    const originalMethod = descriptor.value;
    descriptor.value = function(...args: any[]) {
        const userService = new UserService();
        return originalMethod.apply(this, [userService, ...args]);
    };
    return descriptor;
}

// 定义Controller类
class Controller {
    @injectUserService
    someMethod(userService: UserService) {
        return userService.getUserInfo();
    }
}

// 使用Controller类
const controller = new Controller();
console.log(controller.someMethod());