1. это не совсем честно (потому что там кроме Params есть Result). понятно, что структурная типизация и всё такое, но хотелось бы максимально точно описывать типы
2. Params уже есть внутри fx (Effect<Params, …>)
2.1. не хочу менять тип при изменении эффекта
2.2. не хочу вообще сюда импортировать этот тип, потому что guard работает с эффектом, а не с каким-то там конкретным типом — идейный я
1. Тут это не нужно, функции не нужно знать эту информацию. Расслаивать логику так, чтобы каждый получал только то, что нужно - я считаю правильным.
2. Это классно, что Params, где то есть, но ты впринципе хочешь «пофиксить» отсутствие map у guard и делаешь это максимально костыльным из возможных способов (остальные не супер, но не принуждают тебя хардкодить типы через typeof), который всего лишь чуть короче по количеству символов.
2.1 Твоё право, конкретно в этом узком кейсе typeof может и не очень страшен, но я его использование максимально избегаю.
2.2 Окей, согласен, не стоит костылём фиксить костыль)