Как использовать объект.значения с 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 52

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 to 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);

и вуаля – нет ошибки компиляции ;)