类型“ ObjectConstructor”上不存在属性“值”

时间:2018-09-12 22:43:27

标签: typescript

在下面,我将枚举转换为数组,看来我的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中需要更改什么。救命!

3 个答案:

答案 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)中,如您在ES6ES7ES8的规范中所见({{1的首次出现}})或MDN article

编译器会根据目标进行自我调整,并向您报告它不知道该功能(在该版本中)。

您可以使用polyfill(如MDN文章中所述)或将TypeScript的目标更改为Object.valueses2017。如果要使其在浏览器环境中运行,则可能必须将其转换为较低的ECMAScript版本,例如原始目标esnext。这可以通过Babel完成。网络上有很多资源可以向您显示详细信息(最近,Babel 7发行了,它更好地支持TypeScript)。

顺便说一句,这个问题与以下问题非常相似: