代码之家  ›  专栏  ›  技术社区  ›  Sandra Willford

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

  •  2
  • Sandra Willford  · 技术社区  · 7 年前

    以下是脚本:

    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 回复  |  直到 7 年前
        1
  •  20
  •   basarat    7 年前

    你有 "target": "es2015", 但是 Object.values 不是es2015的一部分。它是es2017的一部分: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_objects/Object/values

    修复

    "target": "ESNext"

        2
  •  32
  •   Charles.xue    7 年前

    添加 es2017.object 编译选项库数组。

        3
  •  5
  •   Hero Wanders    7 年前

    你在打电话吗 Object.values(...) 同时瞄准 es2015 es2017 (也称为ES8),您可以在的规范中看到 ES6 ES7 ES8 Object.values )或者 MDN article .

    您可以使用polyfill(如MDN文章中提到的)或将TypeScript的目标更改为 es2017年 esnext . 如果您想让它在浏览器环境中运行,您可能需要将其传输到较低的ECMAScript版本,就像您的原始目标一样

    顺便说一下,这个问题和这个很相似:

    推荐文章