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

为何TypeScript无法识别Partial对象的Object.values可能包含undefined?

TypeScript中Object.values类型推导不符合预期的问题

先看这段代码:

const example: Partial<{ a: string }> = { a: undefined };
const value = example.a; // 类型为 string | undefined
const values = Object.values(example); // 类型为 string[] (!?)

问题原因

这是TypeScript对Partial<T>和Object.values()的类型设计规则导致的:

  1. Partial<T>的作用是把T的所有属性变为可选属性,在默认编译规则(未开启exactOptionalPropertyTypes)下,可选属性的语义是“该属性可能不存在”,而非“属性值可以是undefined”。
  2. Object.values()的类型推导逻辑默认会忽略可选属性的undefined情况,它假设可选属性要么存在且是对应类型的值,要么完全不存在,不会处理你手动给可选属性赋值undefined的场景,所以最终推导出的类型是string[]。

解决办法

  • 开启exactOptionalPropertyTypes编译选项:开启后,可选属性的类型会严格对应T | undefined,此时Object.values(example)的类型会正确推导为(string | undefined)[]。
  • 显式定义包含undefined的属性类型:把对象类型改为{ a?: string | undefined },这样Object.values就能识别到属性值可能是undefined,推导出正确的联合类型数组。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 07:12:37