TypeScript报错TS2769:自定义filter函数类型不匹配求助
问题分析与修复
错误原因
你编写的xcFilter函数中,reduce的初始值[]未明确类型,TypeScript无法正确推断累加器a的类型应为T[],导致类型匹配错误——它误将累加器类型判定为T,而你返回的是T[],因此抛出Type 'T[]' is not assignable to type 'T'这类类型不兼容报错。
修复方案
给reduce的初始值添加明确的类型注解,让TypeScript明确累加器是T类型的数组:
const xcFilter = <T>(items: T[], filterFn: (item: T) => boolean): T[] => items.reduce((a, v) => filterFn(v) ? [...a, v] : a, [] as T[])
另一种方式是显式指定reduce的泛型参数,直接声明累加器的类型:
const xcFilter = <T>(items: T[], filterFn: (item: T) => boolean): T[] => items.reduce<T[]>((a, v) => filterFn(v) ? [...a, v] : a, [])
验证调用
修复后,调用筛选偶数的代码可正常运行:
xcFilter([1, 2, 3, 4, 5, 6, 7, 8], (v) => v % 2 === 0) // 返回结果:[2, 4, 6, 8],类型完全匹配
内容的提问来源于stack exchange,提问作者Siddhartha Ghosal
相关产品推荐
相关产品推荐

