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

如何基于TypeOne的ReadonlyArray<Maybe<...>>属性创建数组元素对应类型

正确实现方式

你只需要两步操作:先提取数组的元素类型,再解除Maybe的包装即可,完整写法如下:

// 写法1(最简洁,适配绝大多数场景的Maybe定义)
type TypeTwo = NonNullable<TypeOne['data'][number]>

原理解释

  1. 你之前使用TypeOne['data']得到的是完整的ReadonlyArray<Maybe<目标类型>>类型,本身是数组类型,自然不符合你的需求。
  2. TS中所有数组/只读数组类型都可以通过[number]索引访问,获取到数组内元素的类型,执行TypeOne['data'][number]后你会得到Maybe<目标类型>。
  3. 绝大多数场景下Maybe<T>的定义是T | null | undefined,使用TS内置的NonNullable<T>工具类型即可排除掉null和undefined类型,拿到你需要的原始类型,和你手动写的TypeTwo完全等价。

如果你的Maybe有自定义的特殊实现,也可以用条件类型自行提取包裹的类型,示例如下:

// 适配自定义Maybe的通用写法
type UnwrapMaybe<T> = T extends Maybe<infer U> ? U : T
type TypeTwo = UnwrapMaybe<TypeOne['data'][number]>

内容的提问来源于stack exchange,提问作者TP_Dev

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 13:06:03