我正在尝试从对象中形成逗号分隔的字符串
const data = {"Ticket-1.pdf":"8e6e8255-a6e9-4626-9606-4cd255055f71.pdf","Ticket-2.pdf":"106c3613-d976-4331-ab0c-d581576e7ca1.pdf"};
const values = Object.values(data).map(x => x.substr(0, x.length - 4));
const commaJoinedValues = values.join(',');
console.log(commaJoinedValues);
如何使用TypeScript执行此操作?
获取错误文件:
severity: 'Error'
message: 'Property 'values' does not exist on type 'ObjectConstructor'.'
at: '216,27'
source: 'ts'
答案 0 :(得分:172)
Object.values()
是part of ES2017,您得到的编译错误是因为您需要配置TS以使用ES2017库。您可能正在使用当前TS配置中的ES6或ES5库。
解决方案:在--lib
compiler option中使用es2017
或es2017.object
。
例如,使用tsconfig.json
:
"compilerOptions": {
"lib": ["es2017", "dom"]
}
请注意,使用TypeScript 定位ES2017 不在ES2017的浏览器中发出polyfill ,如果您愿意,可以自行在项目中执行此操作。由于Object.values
is not yet well supported by all browsers您确实需要填充:core-js
将do the job。
答案 1 :(得分:76)
使用Object.keys代替。
const data = {
a: "first",
b: "second",
};
const values = Object.keys(data).map(key => data[key]);
const commaJoinedValues = values.join(",");
console.log(commaJoinedValues);
答案 2 :(得分:12)
如果出于某种原因无法在tsconfig中更新为ES7,则可以通过执行此操作Object.values
在TypeScript中使用(<any>Object).values(data)
。
答案 3 :(得分:11)
代替
Object.values(myObject);
使用
Object["values"](myObject);
在您的示例情况下:
const values = Object["values"](data).map(x => x.substr(0, x.length - 4));
这将隐藏ts编译器错误。
答案 4 :(得分:6)
我在tsconfig.json
中增加了在TypeScript中启用此功能的目标
{
"compilerOptions": {
"target": "es2017",
......
}
}
答案 5 :(得分:4)
我刚刚使用CLI和工作区使用Angular 6解决了这个问题,使用library(tidyverse)
df %>%
gather(what, val, -id) %>%
ggplot(aes(val, fill = what)) + geom_histogram() + facet_wrap(~id)
创建了一个库。
就我而言,问题发生在库文件夹中的ng g library foo
,tsconfig.lib.json
部分中没有es2017
。
任何在Angular 6中遇到此问题的人都需要确保您更新lib
以及您的应用tsconfig.lib.json
答案 6 :(得分:1)
在这里,我的tslint
规则配置始终将Object["values"](myObject)
行替换为Object.values(myObject)
。
如果您遇到相同的问题,则有两个选择:
(Object as any).values(myObject)
或
/*tslint:disable:no-string-literal*/
`Object["values"](myObject)`
答案 7 :(得分:-3)
更简单,请使用underscore.js中的_.values
https://underscorejs.org/#values
答案 8 :(得分:-4)
最简单的方法是将Object
强制转换为any
,如下所示:
const data = {"Ticket-1.pdf":"8e6e8255-a6e9-4626-9606-4cd255055f71.pdf","Ticket-2.pdf":"106c3613-d976-4331-ab0c-d581576e7ca1.pdf"};
const obj = <any>Object;
const values = obj.values(data).map(x => x.substr(0, x.length - 4));
const commaJoinedValues = values.join(',');
console.log(commaJoinedValues);
还有瞧-没有编译错误;)