@HiDiv
fullstack разработчик (php, js, html, css, vuejs)

Почему при выполнении вложенных операций теряется тип переменной?

Есть два интерфейса
interface IBigItem {
  fieldName: string
  label: string
  default?: boolean
  ...еще много полей
}
interface ISmallItem {
  fieldName: string
  label: string
  default: boolean
}

Есть большой массив с данными
const columns: IBigItem[]
Из него получаем вначале второй массив
const selected: ISmallItem = columns.map(column => ({
      fieldName: column.fieldName,
      label: column.label,
      default: column.default ?? false
}))

Потом с selected выполняется ряд операций по изменению порядка (сортировка) элементов и у элементов может измениться свойство default. Никаких новых элементов не добавляется и ничего не удаляется.

После этого нам нужно привести массив columns к тому же порядку элементов, что и selected, и обновить свойство default из selected.
const newColumns = selected.map(selectedColumn => {
  const newColumn = columns.find(columnDef => columnDef.fieldName === selectedColumn.fieldName)
  newColumn.default = selectedColumn.default
  return  newColumn
})


На строчке columnDef.fieldName === selectedColumn.fieldName выскакивает ошибка "Unsafe member access .fieldName on an `any` value" над selectedColumn.fieldName

А на строчке newColumn.default = selectedColumn.default ошибка "Unsafe assignment of an `any` value" над newColumn.default и "Unsafe member access .fieldName on an `any` value" над selectedColumn.default.

В чем проблема понять не могу, т.к. в IDE при наведении курсора на selectedColumn показывает правильный тип ISmallItem... Пробовал явно указывать типы через as и делать временные переменные, ничего не помогает.
  • Вопрос задан
  • 329 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы