MST

星途 面试题库

面试题:TypeScript参数装饰器的复杂逻辑实现

假设你有一个用户登录的方法,其参数为用户名和密码。请使用TypeScript参数装饰器实现一个功能,在用户名长度小于6或者密码长度小于8时,抛出一个自定义错误,阻止方法继续执行。
50.3万 热度难度
前端开发TypeScript

知识考点

AI 面试

面试题答案

一键面试
// 自定义错误类
class LoginError extends Error {
    constructor(message: string) {
        super(message);
        this.name = 'LoginError';
    }
}

// 参数装饰器
function validateLogin(target: any, propertyKey: string, parameterIndex: number) {
    return function (value: any) {
        if (parameterIndex === 0 && value.length < 6) {
            throw new LoginError('用户名长度小于6');
        }
        if (parameterIndex === 1 && value.length < 8) {
            throw new LoginError('密码长度小于8');
        }
        return value;
    };
}

class UserService {
    login(
        @validateLogin username: string,
        @validateLogin password: string
    ) {
        console.log(`用户名: ${username}, 密码: ${password}`);
        // 这里可以写实际的登录逻辑
    }
}

// 测试
try {
    const userService = new UserService();
    userService.login('user12', 'password12345678');
} catch (error) {
    if (error instanceof LoginError) {
        console.error(error.message);
    } else {
        console.error('其他错误:', error);
    }
}