calculus and analysis – Should `DiscreteLimit` work when the argument type is specified?

Is it expected that DiscreteLimit fails to evaluate whenever the argument type is specified? E.g.,

Clear(f)
f(x_) := 0
DiscreteLimit(f(x), x -> Infinity)  (* evaluated *)

Clear(f)
f(x_Integer) := 0
DiscreteLimit(f(x), x -> Infinity)  (* not evaluated *)

Clear(f)
f(x : (_Integer | _Real | Infinity)) := 0
DiscreteLimit(f(x), x -> Infinity)  (* not evaluated *)