MST

星途 面试题库

面试题:TypeScript属性装饰器的元数据操作

在TypeScript中,如何利用属性装饰器向类属性添加元数据,并在运行时获取这些元数据?请给出完整的代码示例,包括装饰器定义、使用装饰器的类以及获取元数据的逻辑。
11.5万 热度难度
前端开发TypeScript

知识考点

AI 面试

面试题答案

一键面试
import 'reflect-metadata';

// 定义属性装饰器
function metadataDecorator(key: string, value: any) {
    return function (target: Object, propertyKey: string | symbol) {
        Reflect.defineMetadata(key, value, target, propertyKey);
    };
}

// 使用装饰器的类
class MyClass {
    @metadataDecorator('description', 'This is a sample property')
    myProperty: string;

    constructor() {
        this.myProperty = 'Hello, TypeScript';
    }
}

// 获取元数据的逻辑
const instance = new MyClass();
const metadataValue = Reflect.getMetadata('description', instance, 'myProperty');
console.log(metadataValue);
  1. 首先,引入reflect - metadata库,这是在TypeScript中处理元数据所必需的。
  2. 定义metadataDecorator属性装饰器,它接受两个参数keyvalue,并使用Reflect.defineMetadata来为类的属性添加元数据。
  3. MyClass类中,对myProperty属性应用metadataDecorator装饰器。
  4. 创建MyClass的实例,并使用Reflect.getMetadata来获取之前添加的元数据。