使用Ramda的propOr时传入数字0触发TypeScript类型错误如何解决
报错原因
@types/ramda 对 propOr 函数的默认类型定义针对普通对象键值场景设计,第二个属性名参数默认约束为string类型。你传入的0是用于读取数组索引的number类型键,因此触发类型不匹配警告。
解决方案
方案1:显式指定泛型(推荐,类型安全度最高)
给propOr传入泛型参数,明确声明属性名为number类型,还可以给返回的函数增加泛型约束适配任意类型数组:
import { propOr } from 'ramda' // 通用版本,可适配任意类型的数组输入,返回值类型自动推导 export const firstOrNull = <T,>() => propOr<T | null, number, T[]>(null, 0) // 调用示例: // const res = firstOrNull<string>()(['a', 'b']) // res 类型为 string | null
方案2:类型断言(快速解决,适合临时场景)
直接将0断言为符合要求的类型,绕开默认类型检查:
import { propOr } from 'ramda' export const firstOrNull = propOr(null, 0 as unknown as string)
方案3:替换为pathOr实现
如果接受调整实现逻辑,ramda的pathOr方法的路径参数天然支持number类型的索引,不会触发类型警告:
import { pathOr } from 'ramda' export const firstOrNull = pathOr(null, [0])
内容的提问来源于stack exchange,提问作者Rodrigo
相关产品推荐
相关产品推荐

