В дополнение к
Aetae - дженерик здесь тоже не нужен
Да, парсинг JSON возвращает any (по историческим причинам) и его вот таким дженериком можно легко кастануть в любой тип. Только зачем вообще использовать TypeScript если мы вечно его затыкаем своей правотой?
Даже если данные приходят с нашего сервера, и мы точно знаем их тип - их нужно проверять, ибо нет гарантии, что никто не ошибся на бэке, что мы не ошиблись в описании типа в который кастуем.
Поэтому должен быть тип unknown, чтоб TypeScript требовал все проверить перед использованием:
const ApiServiceModule = {
get: (url: string): Promise<unknown> => fetch(url)
.then(response => response.json())
.catch(err => console.error(err))
}