Тогда тут врядли кто поможет
currentTarget.name любой может быть, т.е. может не быть такого свойства в интерфейсе стейта
Но у меня есть типизация стейта, name там есть
Мдэээ
[e.currentTarget.name] - это динамическое поле
понял, а можно ли это как-то исправить?
Какой тип у стейта?
поменять интерфейс стейта или передавать явно поля из интерфейса
А можно ли опираясь на тип а не интерфейс стейта?
Сделать все ключи в объекте как string, а значение string | number например
это ведь не исправит проблему
почему type?
Ну код не мой, я его редачу...
setState({…} as Partial<TState>)
интерфейс в смысле интерфейс, а не ключевое слово 🙂 type IState можно interface IState заменить, не изменится ничего
Не помогло, всю строку подчеркнуло...
Что именно пишет? as unknown as Partial<TState> попробуй
Чем это поможет?
замени TState => stateTS
Вам надо доказать ts-у, что у e.currentTarget.name тип keyof TState
У меня нет stateTS
TS ожидает увидеть там тип stateTS или какой там, а получает {[key: string]: string]} (у которого могут отстутствовать ключи из stateTS) Поэтому через as “приводим” тип к ожидаемому
Ошибся. Ладно, убери Partial тогда, просто TState
as Pick<TState, keyof TState>
as unknown as TState
Угловые скобочки там лишние И это костыльное решение
Неа, тоже всё подчеркнуло
Object is of type 'unknown'.
скрин можно эта конструкция тут точно работает, если setState ожидает аргумент типа TState
просто напиши как я написал, чел as unknown as TState без всяких скобок
Оу, помогло! Спасибо огромное) А в чём собственно дело было?
setState ожидает объект типа TState то, что ты ему передаешь, это объект типа { [key: string]: string} Этот тип несовместим с твоим TState, потому что у него может не быть свойств, определенных в TState при помощи as мы говорим TS, что этот аргумент точно имеет тип, который ожидается as unknown нужен из-за того, что TS пытается засейвить нас от случайных конверсий между сильно отличающимися типами.
Допетрил, спасибо огромное ещё раз!
Обсуждают сегодня