еще такой вопрос, у нас есть интерфейс с описанием полей и функции, что их выводит, почему их нужно описывать в интерфейсе, а setEmail, setPassword нет. сорри за тупые вопросы, пытаюсь разобраться
useState умеет высчитывать типы на основании переданного аргумента. дженерики тебе там (конкретно в этом случае) не нужны.
а пропсы нужно описывать потому, что посчитать никак нельзя, какие типы компонент будет принимать. затем они и пишутся