I create a TypedDict usually because ShopData is not used with **data but pass the arguments of the dict one by one. I make code shorter just for simplicity in example. Here the full code usually i create.
data: ShopDict = res.json()
cats_data = []
cats_dict = data['cats']
for cat_dict in cats_dict:
cats_data.append(CatData(cat_dict['name'], cat_dict['color']))
shop = ShopData(cat_data)
if i could type hint the data with Unpack[ShopData] instead of ShopDict, I no longer need to create the TypedDict that looks very similar to my dataclass.