Как я могу переписать эту функцию сокращения в машинописном тексте?

В настоящее время я пытаюсь преобразовать некоторый реагирующий нативный код в машинописный текст, и есть несколько функций сокращения, которые выдают ошибки. Как я могу переписать это, чтобы у меня не было проблем с типом при запуске?

Я пробовал разные способы ввода функции, а также ожидаемого результата, но пока безуспешно.

myArray: data.items.reduce( (map: object, obj: myInterface) : object  => { map[obj.id] = obj; return map; }, [])

элемент myArray моего объекта должен быть заполнен массивом элементов, определенных в myInterface. Когда я запускаю, я получаю следующую ошибку.

TypeScript error in MyPath/:

Element implicitly has an 'any' type because expression of type 'number' can't be used to index type '{}'.
  No index signature with a parameter of type 'number' was found on type '{}'.  TS7053

    128 |                 appVersion: data.version || "",
    129 |                 offline: false,
    130 |                 myArray: data.items.reduce( (map: object, obj: myInterface) : object  => { map[obj.id] = obj; return map; }, [])
        |                                                                                           ^
    131 |             });

Вы не можете назначать свойства объекту в этих условиях. Попробуйте заменить object в map: object на это: [propName: string]: any вот так: map: {[propName: string]: any}

Randy Casburn 12.06.2019 18:02

О да, это тоже проблема

Avin Kavish 12.06.2019 18:04
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
2
1 690
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ваша карта имеет тип объекта. Вы должны указать объект в качестве начального значения для функции сокращения.

myArray: data.items.reduce(
   (map: Record<myInterface['id'], myInterface>, obj: myInterface): Record<myInterface['id'], myInterface>  => 
         { map[obj.id] = obj; return map; }, 
    {})

Объявление map: Record<myInterface['id'], myInterface> может быть лучше, если id ограничено больше, чем string | number | symbol

Patrick Roberts 12.06.2019 18:04

да, это безопасно

Avin Kavish 12.06.2019 18:06
Ответ принят как подходящий

Ответ Патрика Роберта исправил это. Спасибо!

 myArray: data.items.reduce( (map: Record<myInterface['id'], myInterface>, obj: myInterface) : object  => { map[obj.id] = obj; return map; }, {})

Другие вопросы по теме