为何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,提问作者이재현
相关产品推荐
相关产品推荐

