Type-hint a numpy NDArray with different possible dtypes

How should I type-hint a numpy ndarray which can be of any integer type? My thoughts are:

from numpy.typing import DTypeLike, NDArray

# option (1)
arr: NDArray[+(np.int8, np.int16, np.int32, np.int64)]

# option (2)
ScalarIntType: tuple[DTypeLike, ...] = (np.int8, np.int16, np.int32, np.int64)
arr: NDArray[+ScalarIntType]

# option (3)
arr: NDArray[np.int8] | NDArray[np.int16] | NDArray[np.int32] | NDArray[np.int64]

Is one of those options valid and/or which one would be best and/or which alternatives do I have?


I found this solution for now that seems OK:

from typing import Generic, TypeVar

ScalarIntType = TypeVar("ScalarIntType", np.int8, np.int16, np.int32, np.int64)

class ScalarIntArray(np.ndarray, Generic[ScalarIntType]):

And I type-hint to ScalarIntArray.