stackoverflowのNumpy type hints in Python (PEP 484)という記事で nptyping
というライブラリが紹介されていました。
import numpy as np from nptyping import Array def foo(array: Array[np.float64]) -> str: ...
また、shapeも含めて指定できるようです。ただし、現時点でmypyなどでshapeも含めてチェックすることはできず、あくまで実行時にisinstanceでチェックする、もしくは可読性のための記述するために用いるようです。
arr = np.array([[1.0, 2.0], [3.0, 4.0], [5.0, 6.0]]) isinstance(arr, Array[np.float64, 3, 2]) # True
具体的な記述方法については、同様の調査を行っている記事が既にありました。
結論からいうと、mypyを用いたnumpy.ndarrayの型ヒントチェックはnumpy-stubsを用いれば可能。
ただし、現(2020年1月)時点ではndarrayのdtype, shapeを指定してのmypyチェックはできない。
一方、dtype, shapeを含めた型ヒントを可読性のためのアノテーションとしてつけたいというのであれば、nptypingを用いるという選択肢がよさそう。