You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 06:06:04