在下面,我将枚举转换为数组,看来我的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中需要更改什么。救命!
答案 0 :(得分:5)
您拥有"target": "es2015",
,但Object.values
不是es2015的一部分。它是es2017的一部分:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_objects/Object/values
使用具有该功能的"target": "ESNext"
。
答案 1 :(得分:2)
将es2017.object
添加到editorOptions lib数组。
答案 2 :(得分:1)
您在定位Object.values(...)
(也称为ES6)时正在呼叫es2015
。
不幸的是,此功能首先出现在es2017
(也称为ES8)中,如您在ES6,ES7,ES8的规范中所见({{1的首次出现}})或MDN article。
编译器会根据目标进行自我调整,并向您报告它不知道该功能(在该版本中)。
您可以使用polyfill(如MDN文章中所述)或将TypeScript的目标更改为Object.values
或es2017
。如果要使其在浏览器环境中运行,则可能必须将其转换为较低的ECMAScript版本,例如原始目标esnext
。这可以通过Babel完成。网络上有很多资源可以向您显示详细信息(最近,Babel 7发行了,它更好地支持TypeScript)。
顺便说一句,这个问题与以下问题非常相似: