MST

星途 面试题库

面试题:TypeScript 中如何通过装饰器实现简单的元数据添加

请编写一个 TypeScript 装饰器,给类的某个方法添加一个简单的元数据,例如标记该方法为 'important',并在调用该方法时能够获取到这个元数据。
14.2万 热度难度
前端开发TypeScript

知识考点

AI 面试

面试题答案

一键面试
// 定义装饰器
function important(target: any, propertyKey: string, descriptor: PropertyDescriptor) {
    // 添加元数据
    Reflect.defineMetadata('isImportant', true, target, propertyKey);
    const originalMethod = descriptor.value;
    descriptor.value = function(...args: any[]) {
        // 调用方法时获取元数据
        const isImportant = Reflect.getMetadata('isImportant', target, propertyKey);
        console.log(`This method is important: ${isImportant}`);
        return originalMethod.apply(this, args);
    };
    return descriptor;
}

class MyClass {
    @important
    myMethod() {
        console.log('Executing myMethod');
    }
}

const myObj = new MyClass();
myObj.myMethod();