1. Перед return поставьте if(!gif) return null; и станет лучше.)
Собсно суть логична: вы сами написали что gif может быть undefined, попытка получения свойства у undefined(gif.<some>) - очевидная ошибка.
Вы должны заранее обработать такой случай и принять меры.
object в современном ts занчит просто {} без всяких свойств. Если вам нужен любой объект с любыми свойствами, то используйте Record<string, any>. Однако по хорошему никаких any быть не должно, вам следует чётко описать структуру получаемого объекта.
2. Ничего не понятно. useOnScreen - это нестандартных хук. Реализаций в гугле полно разных. Так что приведите его код и скажите, что вы хотите от него добиться.