“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 的目标更改为 es2017esnext。如果您想让它在浏览器环境中运行,您可能必须将其转换为较低的 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' 上不存在”

类型“typeof ...”上不存在属性“use”,类型“typeof”上不存在属性“extend”

TypeScript:类型“”上不存在属性

错误 TS2339:类型“”上不存在属性“包含”

类型“”上不存在属性“forEach”

类型“”上不存在 Typescript 错误属性“成员”