Typescript配合Ramda使用时如何为firstOrNull添加正确类型声明
解决方案
错误原因
- 你之前的泛型声明语法错误,泛型参数需要绑定到函数签名而非直接赋值给变量类型
- Ramda 提供的
propOr在 pointfree 写法下无法自动推导泛型关联关系,导致返回值被识别为unknown类型
正确的类型定义
你可以直接通过类型断言明确firstOrNull的泛型函数签名,写法如下:
import { propOr } from 'ramda' export const firstOrNull = propOr(null, '0') as <T>(array: T[]) => T | null
如果不喜欢类型断言,也可以写成非 pointfree 的显式返回版本,类型更安全:
import { propOr } from 'ramda' export const firstOrNull = <T>(array: T[]): T | null => { return propOr(null, '0', array) }
效果验证
修改后调用代码无需做任何调整:
const organization = firstOrNull(snapshot.docs)?.data() as Organization
此时 TS 会自动推导出firstOrNull(snapshot.docs)的返回类型为QueryDocumentSnapshot<DocumentData> | null,不会再报Object is of type 'unknown'的错误。
内容的提问来源于stack exchange,提问作者Rodrigo
相关产品推荐
相关产品推荐

