如何获取全局Array对象函数类型?如何用Array.find类型定义findObj的pred参数?
关于获取Array方法类型的问题解答
1. 如何获取全局Array对象函数的类型?
想要获取Array原型上方法的类型,你不能直接用typeof Array<U>.find这种写法——因为Array<U>是类型,不是具体的值,没法通过.去访问它的方法。正确的思路是从Array.prototype这个值上取方法的类型,或者从Array<T>的实例类型中提取对应方法的类型:
- 如果是不带泛型的通用类型,可以直接写:
typeof Array.prototype.find - 如果要绑定到具体的数组元素类型
T,可以用索引访问类型:Array<T>['find']
2. 在StackBlitz场景下,如何获取Array.find的类型来定义findObj的pred参数?
你之前的写法type XYZ<U> = typeof Array<U>.find是行不通的,因为Array<U>是类型而非值。咱们调整一下,直接从Array<T>的实例类型中提取find方法的类型即可,代码示例如下:
// 正确提取Array.find的类型,绑定到泛型T type XYZ<T> = Array<T>['find']; const findObj = function<T>(obj: T[], pred: XYZ<T>): T | undefined { // 现在pred的类型完全匹配Array.find的参数要求 return obj.find(pred); };
这里补充个小细节:Array.find本身的返回值是T | undefined(当找不到匹配项时会返回undefined),所以建议把findObj的返回类型也改成T | undefined,这样类型更严谨。当然如果你的业务逻辑能保证一定能找到,也可以用非空断言return obj.find(pred)!,但要注意潜在的运行时风险。
内容的提问来源于stack exchange,提问作者Andre Elrico
相关产品推荐
相关产品推荐

