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

TypeScript 如何解包 Maybe<T> 类型并提取其包裹的内部类型

解法

方法1:使用你自己实现的条件类型

你写的条件类型思路完全正确,只需要按顺序先解包Maybe类型,再提取下层字段即可:

type Maybe<T> = T | null
type MyData = { postTitle: string } & { meta: Maybe<{ tags: Array<El> }> }

// 你写的解包类型,命名可根据语义调整
type UnwrapMaybe<T> = T extends Maybe<infer U> ? U : T

// 提取流程
type Meta = UnwrapMaybe<MyData['meta']> // 解包后得到 { tags: Array<El> }
type Tags = Meta['tags']
type TargetEl = Tags[number] // 最终得到的El类型

方法2:使用TS内置工具类简化

因为你的Maybe本质是T | null,可以直接用TS内置的NonNullable<T>工具类实现解包,一行即可完成提取:

type ExtractedEl = NonNullable<MyData['meta']>['tags'][number]

原理解释

你之前操作失败的原因是没有先处理Maybe带来的null可能性:未解包的MyData['meta']是联合类型{ tags: Array<El> } | null,null类型不存在tags属性,直接取下标会报错。你实现的UnwrapMaybe或者内置的NonNullable都会过滤掉联合类型中的null,拿到实际被包裹的业务类型,之后就可以用你熟悉的嵌套下标方式提取深层字段类型了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 23:54:04