要编写一个类型守卫,将类型T细化为Array
function isArray(value: T): value is Array {
return Array.isArray(value);
}
// 使用类型守卫的示例
function processArray(arr: T | Array) {
if (isArray(arr)) {
// 在这里,arr 被细化为 Array
arr.push('new element'); // 可以调用 Array 的方法
} else {
// 在这里,arr 是 T 类型,不是 Array
// 执行其他操作
}
}
// 使用示例
const arr1 = [1, 2, 3];
processArray(arr1); // arr1 被细化为 Array
const arr2 = 'string';
processArray(arr2); // arr2 是 string 类型,不是 Array
在上面的代码中,isArray
函数是一个类型谓词函数,它接受一个泛型参数 T
和 K
,并返回一个类型守卫,用来判断传入的值是否为 Array
类型。在 processArray
函数中,我们使用了 isArray
函数来对传入的参数进行类型细化。如果传入的值是 Array
类型,那么在类型守卫的作用域内,它就被细化为 Array
类型,我们可以调用 Array
的方法。否则,在 else
分支中,它仍然是 T
类型,不是 Array
类型。