在下面的示例中,我将枚举转换为数组,似乎在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;
}
}
}));
Run Code Online (Sandbox Code Playgroud)
这给了我这个错误:
Property 'values' does not exist on type 'ObjectConstructor'.
tsconfig如下...
{
"compilerOptions": {
"module": "es6",
"target": "es2015",
"sourceMap": true,
"jsx": "react",
"moduleResolution": "node",
"declaration": false,
"allowSyntheticDefaultImports": true
}
}
Run Code Online (Sandbox Code Playgroud)
我对此有些陌生,所以不确定在tsconfig中需要更改什么。救命!
小智 36
添加es2017.object到compilerOptions.lib您的tsconfig.json.
bas*_*rat 10
您拥有"target": "es2015",但Object.values不属于es2015。它是es2017的一部分:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_objects/Object/values
使用"target": "ESNext"具有该功能的产品。
您Object.values(...)在定位时调用es2015(也称为 ES6)。不幸的是,此功能首先出现在es2017(也称为 ES8)中,正如您在ES6、ES7、ES8(首次出现Object.values)的规范或MDN 文章 中所见。
编译器根据目标自行调整并向您报告它不知道该函数(在该版本中)。
您可以使用 polyfill(如 MDN 文章中所述)或将 TypeScript 的目标更改为es2017或esnext。如果您想让它在浏览器环境中运行,您可能需要将其转换为较低的 ECMAScript 版本,例如您的原始目标es2015。这可以通过 Babel 来完成。网络上有很多资源可以向您展示详细信息(最近发布的 Babel 7 更好地支持 TypeScript)。
顺便说一句,这个问题与这个问题非常相似:
| 归档时间: |
|
| 查看次数: |
5535 次 |
| 最近记录: |