TypeScript报错:Property 'entries'不存在于ObjectConstructor,求替代方案
解决TypeScript中
Object.entries不支持的替代方案 嘿,这个问题我之前碰过好多次,旧版TypeScript确实没把Object.entries纳入默认支持的API里,不想升级版本的话,这几个替代方案绝对够用:
方案一:用Object.keys手动遍历键值对
这是最直接的办法,因为Object.keys在旧版TS里是支持的。我们先拿到对象的所有键名,再通过键名取出对应的值,完全能实现和Object.entries一样的逻辑:
// 假设你的data是某个类型,比如Record<string, any>或者自定义类型 Object.keys(data).forEach(key => { const value = data[key]; this.array.push({ key, value }); // 这里替换成你原本的push逻辑 });
如果TS对data[key]的类型有抱怨,你可以给data加个类型断言,比如data as Record<string, YourValueType>,或者更贴合你实际数据的类型定义。
方案二:自己实现一个类型安全的objectEntries函数
如果需要频繁用到类似entries的功能,不如自己封装一个函数,既兼容旧版TS,还能保证类型安全:
function objectEntries<T extends object>(obj: T): Array<[keyof T, T[keyof T]]> { return Object.keys(obj).map(key => [ key as keyof T, obj[key] as T[keyof T] ]); } // 使用方式和原生Object.entries完全一致 objectEntries(data).forEach(([key, value]) => { this.array.push(...); // 你的原有逻辑直接复用 });
这个函数会自动推导对象的键和值的类型,比直接用Object.keys的方式类型更严谨,适合在项目里复用。
方案三:调整TS配置文件(无需修改代码)
如果你的运行环境其实支持ES2017+(比如现代浏览器或Node.js 8+),只是TS编译报错,那可以修改tsconfig.json里的lib选项,添加对ES2017对象API的支持:
{ "compilerOptions": { "lib": ["ES2015", "ES2017.Object", "DOM"] // 根据你的需求调整其他lib项 } }
这样TS就不会再报错,而且不用改任何业务代码,前提是你的运行环境能兼容这些API。
内容的提问来源于stack exchange,提问作者thx4help
相关产品推荐
相关产品推荐

