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

为何Object.values({})类型为unknown[],而Object.keys({})类型为string[]?

关于Object.values与Object.keys的类型差异解析

先看示例代码:

var testObj = {};
const typeTest3 = Object.values(testObj);

核心差异原因拆解

  • Object.keys的类型设定逻辑
    JavaScript里对象的非Symbol键名本质都是字符串,哪怕你定义了带明确键的对象,运行时也可能被动态添加其他键。TypeScript基于这个运行时特性,直接将Object.keys()的返回值类型固定为string[]——这是最贴合实际行为的安全设定,避免静态类型推断和运行时实际情况不符导致的错误。

  • Object.values的类型设定逻辑
    对象的值可以是任意类型,当你定义var testObj = {}时,TypeScript会推断其类型为{}(空对象,无已知键值对),此时无法预知后续会给这个对象添加什么类型的值,所以只能用最宽泛的unknown来表示值的类型,最终Object.values(testObj)的类型就是unknown[]。如果给对象指定明确类型,比如var testObj: {name: string} = {name: "foo"},那Object.values(testObj)的类型就会变成string[]。

内容的提问来源于stack exchange,提问作者이재현

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 11:35:19