На самом деле это не необязательная проблема связывания, а проблема того, как работает Object.keys
. Typescript предполагает, что у объекта может быть больше ключей, чем известно во время компиляции , поэтому тип key
здесь string
, а не keyof variable
. Чтобы обойти это, вы должны сообщить компилятору TS, что все ключи известны во время компиляции, используя
Object.keys(variable).forEach((key) => {
fun(variable[key as keyof typeof variable].value)
})
Вы уже рассматриваете variable
как ненулевую переменную, когда вы ее используете. в Object.keys
, поэтому нет необходимости дополнительно использовать для него необязательную цепочку. Кроме того, когда вы преобразовываете key
в keyof typeof variable
, вы утверждаете, что он уже существует, поэтому вы также можете удалить необязательную цепочку перед ?.value
.