Начиная с mypy 0.641, mypy не поддерживает искомую рекурсивную аннотацию типа, которую вы ищете.Естественный синтаксис:
from typing import Union, Dict, List
JSONVal = Union[None, bool, str, float, int, List['JSONVal'], Dict[str, 'JSONVal']]
d: JSONVal = {'a': ['b']}
выдает ошибку, сообщающую об отсутствии поддержки рекурсивного типа:
$ mypy asdf.py
asdf.py:3: error: Recursive types not fully supported yet, nested types replaced with "Any"
Также см. Поток отслеживания проблем mypy о поддержке рекурсивного типа.
Пока что, вероятно, Dict[str, Any]
- это путь.