MST
星途 面试题库

面试题:TypeScript属性装饰器实现复杂属性验证

在TypeScript中,假设你有一个`Product`类,类中有`price`属性,要求使用属性装饰器对`price`进行验证,确保其值大于0且为数字类型。如果验证不通过,抛出合适的错误。请编写完整的代码实现。
38.6万 热度难度
前端开发TypeScript

知识考点

AI 面试

面试题答案

一键面试
function validatePrice(target: any, propertyKey: string) {
    let value: number;
    const getter = function () {
        return value;
    };
    const setter = function (newValue: number) {
        if (typeof newValue!== 'number' || newValue <= 0) {
            throw new Error('Price must be a number greater than 0');
        }
        value = newValue;
    };
    if (delete target[propertyKey]) {
        Object.defineProperty(target, propertyKey, {
            get: getter,
            set: setter,
            enumerable: true,
            configurable: true
        });
    }
}

class Product {
    @validatePrice
    price: number;
    constructor(price: number) {
        this.price = price;
    }
}