Задать вопрос
@Richswitch
junior

TS2345 как обойти ошибку?

Привет!

Есть такой код:
interface PopupInfoObj {
  city?: string,
  image?: string,
  longitude?: number | null,
  latitude?: number | null,
  population?: string,
  state?: string
}
interface State {
  width: number,
  height: number,
  latitude: number,
  longitude: number,
  zoom: number,
  popupInfo?: PopupInfoObj | null | void ;
}

const App: React.FC<Props> = props => {
  const initialState: State = {
    width: 400,
    height: 400,
    latitude: 37.7577,
    longitude: -122.4376,
    zoom: 8,
    popupInfo: {
      longitude: null,
      latitude: null
    },
  }
  const [viewport, setViewport] = useState(initialState)

  const _renderCityMarker = (city: PopupInfoObj, index: number) => {
    return (
      <Marker
        key={`marker-${index}`}
        longitude={city.longitude}
        latitude={city.latitude}
      >
        <CityPin 
           size={20} 
           onClick={() => setViewport({ popupInfo: city })}     <------- ts(2345) текст ошибки ниже
         />
      </Marker>
    )
  }

return (...)


Таким образом когда я пытаюсь добавить новые данные city для объекта popupInfo TS выдает ошибку
5d83173abab68653188577.png

Что делать?
  • Вопрос задан
  • 5644 просмотра
Подписаться 1 Простой Комментировать
Помогут разобраться в теме Все курсы
  • Яндекс Практикум
    React-разработчик
    3 месяца
    Далее
  • Нетология
    Frontend-разработка на React
    10 недель
    Далее
  • Академия Eduson
    React-разработчик
    2 месяца
    Далее
Решения вопроса 1
@Richswitch Автор вопроса
junior
Я успел проклясть всех на свете. Но ошибка была по вине моих кривых рук
setViewport({...viewport, popupInfo: cityObj})
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@lnked
Попробуйте
const [viewport, setViewport] = useState<State>(initialState)
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы
ITK academy Нижний Новгород
от 50 000 до 90 000 ₽
от 250 000 до 300 000 ₽
IT ATLAS Москва
от 200 000 до 250 000 ₽