function processUnknownValue(value: unknown) {
// 使用类型守卫,判断value是否是对象且包含data属性
if (typeof value === 'object' && value!== null && 'data' in value) {
const data = value.data;
// 使用类型守卫,判断data是否包含items属性
if ('items' in data) {
const items = data.items;
// 使用类型缩小,判断items是string数组
if (Array.isArray(items) && items.every(item => typeof item ==='string')) {
return items.map(item => item.toUpperCase());
}
// 使用类型缩小,判断items是number数组
else if (Array.isArray(items) && items.every(item => typeof item === 'number')) {
return items.map(item => item * 2);
}
}
}
return null;
}
// 解释:
// 1. `typeof value === 'object' && value!== null && 'data' in value`:这是一个类型守卫,
// 确保value是一个对象且包含data属性,这样才能安全访问data。
// 2. `'items' in data`:进一步类型守卫,确保data对象包含items属性,才能访问items。
// 3. `Array.isArray(items) && items.every(item => typeof item ==='string')`:
// 这是类型缩小,确认items是一个数组且数组中所有元素都是字符串类型,此时就能安全地调用字符串的toUpperCase方法。
// 4. `Array.isArray(items) && items.every(item => typeof item === 'number')`:
// 同样是类型缩小,确认items是一个数组且数组中所有元素都是数字类型,此时就能安全地对数字元素加倍。