gpt4 book ai didi

typescript - ((x : any): x is T[] => x && typeof x. 长度 === 'number' )

转载 作者:搜寻专家 更新时间:2023-10-30 21:37:48 25 4
gpt4 key购买 nike

我刚看到这行代码,它检查一个变量是否是一个数组:

export const isArray = Array.isArray || (<T>(x: any): x is T[] => x && typeof x.length === 'number');

isArray([1, 2, 3, 4, 5])

我真的很困惑如何理解 (<T>(x: any): x is T[] => x && typeof x.length === 'number') .如何理解铸件和表达方式?

请注意,我来自 JavaScript 背景,所以我理解 Array.isArrayx.length部分。

最佳答案

<T>(x: any): x is T[] - 这是函数的签名。该函数是通用的 ( <T> ),带有 any范围。这个函数签名也是一个类型保护,这意味着它会影响调用后参数的类型,即 x 的类型。将是 T[]如果isArray返回真 ( x is T[] ) 所以

const isArray = (<T>(x: any): x is T[] => x && typeof x.length === 'number');
let x: any;
if(isArray<number>(x)) {
console.log(x[0]) // x is an array
}

下一部分是函数体,它只是检查length。存在并且是一个 number

x && typeof x.length === 'number'

注意

Array.isArray的签名与替换签名 ( <T>(x: any): x is T[] ) 不同。允许isArray作为类型保护的用法,我建议将声明更改为:

export const isArray  = Array.isArray as (<T>(x: any) => x is T[]) 
|| (<T>(x: any): x is T[] => x && typeof x.length === 'number');

关于typescript - (<T>(x : any): x is T[] => x && typeof x. 长度 === 'number' ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48455529/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com