MST

星途 面试题库

面试题:TypeScript属性装饰器实现简单数据验证

请使用TypeScript属性装饰器实现一个简单的数据验证功能,验证某个类的属性值是否为数字类型。如果不是数字类型,抛出一个错误。
26.0万 热度难度
前端开发TypeScript

知识考点

AI 面试

面试题答案

一键面试
function validateNumber(target: any, propertyKey: string) {
    let value: any;

    const getter = function () {
        return value;
    };

    const setter = function (newValue: any) {
        if (typeof newValue!== 'number') {
            throw new Error(`The value of ${propertyKey} must be a number.`);
        }
        value = newValue;
    };

    if (delete target[propertyKey]) {
        Object.defineProperty(target, propertyKey, {
            get: getter,
            set: setter,
            enumerable: true,
            configurable: true
        });
    }
}

class Example {
    @validateNumber
    numberProperty: number;
}

// 测试
try {
    const example = new Example();
    example.numberProperty = 10;
    console.log(example.numberProperty);

    example.numberProperty = 'not a number'; 
} catch (error) {
    console.error(error.message); 
}