【问题标题】:Property 'values' does not exist on type 'ObjectConstructor'“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 中更改什么。救命!

【问题讨论】:

标签: typescript


【解决方案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)中,正如您在 ES6ES7ES8Object.values 的首次出现)或 MDN article 的规范中看到的那样。

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

您可以使用 polyfill(如 MDN 文章中所述)或将 TypeScript 的目标更改为 es2017esnext。如果您想让它在浏览器环境中运行,您可能必须将其转换为较低的 ECMAScript 版本,例如您的原始目标 es2015。这可以通过 Babel 来完成。网络上有许多资源可以向您展示详细信息(甚至最近,随着 Babel 7 的发布,对 TypeScript 的支持得到了更好的支持)。

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

【讨论】:

    【解决方案3】:

    es2017.object 添加到tsconfig.json 中的compilerOptions.lib 数组中。

    【讨论】:

    • 或 {"compilerOptions": {"lib": ["es2017"] }
    猜你喜欢
    • 2016-06-27
    • 2018-01-07
    • 2018-10-13
    • 2020-10-02
    • 1970-01-01
    • 1970-01-01
    • 2016-12-16
    • 2017-06-23
    • 2017-10-06
    相关资源
    最近更新 更多