MST

星途 面试题库

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

假设你有一个类,其中某个方法需要依赖其他服务。请使用TypeScript装饰器实现一个依赖注入机制,使得在调用该方法时,能够动态注入所需的服务实例,并保证类型安全。
16.6万 热度难度
前端开发TypeScript

知识考点

AI 面试

面试题答案

一键面试
  1. 首先,定义一个装饰器工厂函数来创建依赖注入装饰器:
function inject<T>(service: T) {
    return function (target: any, propertyKey: string, descriptor: PropertyDescriptor) {
        const originalMethod = descriptor.value;
        descriptor.value = function (...args: any[]) {
            return originalMethod.apply(this, [service, ...args]);
        };
        return descriptor;
    };
}
  1. 然后,定义一个服务接口和具体的服务类:
// 服务接口
interface MyService {
    doSomething(): string;
}

// 具体服务类
class MyServiceImpl implements MyService {
    doSomething(): string {
        return 'Service is doing something';
    }
}
  1. 接着,定义需要依赖注入的类和方法:
class MyClass {
    @inject(new MyServiceImpl())
    myMethod(service: MyService, otherArg: string) {
        return service.doSomething() + ' and ' + otherArg;
    }
}
  1. 最后,测试依赖注入:
const myInstance = new MyClass();
console.log(myInstance.myMethod('extra argument'));

以上代码实现了一个简单的依赖注入机制,使用inject装饰器在调用myMethod时动态注入MyService实例,并通过TypeScript确保类型安全。