MST
星途 面试题库

面试题:TypeScript类型守卫在泛型与递归中的深度运用

编写一个递归函数`deepValidate`,接受一个泛型类型`T`,`T`可能是简单类型(如`string`、`number`等),也可能是复杂的对象类型(对象的属性值又可能是对象或简单类型)。使用类型守卫在递归过程中,确保对象的所有属性值类型符合预期。例如,如果是`string`类型的值,长度不能为0;如果是`number`类型的值,必须大于0。最后返回验证是否通过的布尔值。请详细写出函数的类型定义和实现逻辑。
28.4万 热度难度
前端开发TypeScript

知识考点

AI 面试

面试题答案

一键面试
function deepValidate<T>(data: T): boolean {
    if (typeof data ==='string') {
        return data.length > 0;
    } else if (typeof data === 'number') {
        return data > 0;
    } else if (Array.isArray(data)) {
        return data.every(item => deepValidate(item));
    } else if (typeof data === 'object' && data!== null) {
        for (const key in data) {
            if (!deepValidate((data as { [key: string]: any })[key])) {
                return false;
            }
        }
        return true;
    }
    return true;
}