Как использовать объект.значения с typescript?
Я пытаюсь сформировать строку, отделенную запятыми от объекта,
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'
6 ответов:
использование объекта.вместо этого ключи.
const data = { a: "first", b: "second", }; const values = Object.keys(data).map(key => data[key]); const commaJoinedValues = values.join(","); console.log(commaJoinedValues);
Object.values()
и часть ES2017, и ошибка компиляции, которую вы получаете, заключается в том, что вам нужно настроить TS для использования библиотеки ES2017. Вероятно, вы используете библиотеку ES6 или ES5 в текущей конфигурации TS.решение: используйте
es2017
илиes2017.object
в своем--lib
опции компилятора.например, с помощью
tsconfig.json
:"compilerOptions": { "lib": ["es2017", "dom"] }
обратите внимание, что таргетинг ES2017 с TypeScript тут не Эмит полифилов в браузере для ES2017, это до вас, чтобы сделать это в своем проекте сами, если хотите. И с тех пор
Object.values
пока не поддерживается всеми браузерами вы определенно хотите полифилл:core-js
будет выполнить задание.
можно использовать
Object.values
в TypeScript делая это(<any>Object).values(data)
если по какой-то причине вы не можете обновить ES7 в tsconfig.
Я просто ударил эту точную проблему с Angular 6, используя CLI и рабочие пространства для создания библиотеки с помощью
ng g library foo
.в моем случае проблема была в
tsconfig.lib.json
в папке библиотеки, в которой не былоes2017
входит в .любой, кто натыкается на эту проблему с Angular 6, вам просто нужно убедиться, что вы обновляете вас
tsconfig.lib.json
а также приложенияtsconfig.json
вместо
Object.values(myObject);
использовать
Object["values"](myObject);
в вашем примере:
const values = Object["values"](data).map(x => x.substr(0, x.length - 4));
это скроет ошибку компилятора ts.
самый простой способ-бросить
Object
toany
, например: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);
и вуаля – нет ошибки компиляции ;)