“ObjectConstructor”类型上不存在属性“值”
Posted
技术标签:
【中文标题】“ObjectConstructor”类型上不存在属性“值”【英文标题】:Property 'values' does not exist on type 'ObjectConstructor' 【发布时间】:2019-02-17 15:22:40 【问题描述】:在下面我将枚举转换为数组,看来我的 tsconfig.json 中可能缺少一些东西。
这是脚本:
const menuItems = Object.values(MediaListFilterType).map(value => (
type: value,
description: () =>
switch (value)
case value === MediaListFilterType.notPitched:
return 'Exclude already pitched';
break;
case value === MediaListFilterType.notDoublePitched:
return 'Exclude double pitched';
break;
case value === MediaListFilterType.assignedToMe:
return 'Assigned to me';
break;
case value === MediaListFilterType.notAssigned:
return 'Unassigned';
break;
));
这给了我这个错误:
Property 'values' does not exist on type 'ObjectConstructor'.
而tsconfig如下...
"compilerOptions":
"module": "es6",
"target": "es2015",
"sourceMap": true,
"jsx": "react",
"moduleResolution": "node",
"declaration": false,
"allowSyntheticDefaultImports": true
我对此有点陌生,所以我不确定我需要在 tsconfig 中更改什么。救命!
【问题讨论】:
相关:***.com/questions/45422573/… 【参考方案1】:您有 "target": "es2015",
但 Object.values
不是 es2015 的一部分。它是 es2017 的一部分:https://developer.mozilla.org/en-US/docs/Web/javascript/Reference/Global_objects/Object/values
修复
使用具有该功能的"target": "ESNext"
。
【讨论】:
-1 目标用于指定编译的javascript的标准。使用values
不是句法更改。这应该使用lib
进行配置,特别是es2017.object
【参考方案2】:
您正在调用Object.values(...)
,同时定位es2015
(也称为ES6)。
不幸的是,这个功能首先出现在 es2017
(也称为 ES8)中,正如您在 ES6、ES7、ES8(Object.values
的首次出现)或 MDN article 的规范中看到的那样。
编译器根据目标进行自我调整并向您报告它不知道该函数(在该版本中)。
您可以使用 polyfill(如 MDN 文章中所述)或将 TypeScript 的目标更改为 es2017
或 esnext
。如果您想让它在浏览器环境中运行,您可能必须将其转换为较低的 ECMAScript 版本,例如您的原始目标 es2015
。这可以通过 Babel 来完成。网络上有许多资源可以向您展示详细信息(甚至最近,随着 Babel 7 的发布,对 TypeScript 的支持得到了更好的支持)。
顺便说一句,这个问题和这个问题很相似:
Property 'assign' does not exist on type 'ObjectConstructor' Property 'entries' does not exist on type ObjectConstructor【讨论】:
【参考方案3】:将es2017.object
添加到tsconfig.json
中的compilerOptions.lib
数组中。
【讨论】:
或 "compilerOptions": "lib": ["es2017"]以上是关于“ObjectConstructor”类型上不存在属性“值”的主要内容,如果未能解决你的问题,请参考以下文章
使用 TypeScript 和 Object.assign 给我一个错误“属性 'assign' 在类型 'ObjectConstructor' 上不存在”