Python 装饰器问题

问题遇到的现象和发生背景

发生背景:我在写程序的时候经常会忘记某个类或者某个函数中的某个参数会被我怎么处理,或者我经常忘记某个类包含哪些方法,所以我希望我定义完我的类或者函数之后,会有语法提示,但是就在我尝试让某个dict里面只能包含指定名字的两个键,且两个键的值的类型是固定的,我发现我做不到

如果我想定义某个函数x,它需要传入类型为dict的参数a,并且这个dict只能包含两个键a,b,且这个两个键的类型为int
例如我希望我的函数x只能这样执行

xxx(a={'a':1,'b':1})

而不能

xxx(a={'c':1})
#或
xxx(a={'a':0.1,'b':1})

之类的

用代码块功能插入代码,请勿粘贴截图

我的代码长这样

def move(self, pos, remain:(tuple[dict["surface":pygame.Surface,"pos":any]] or list[dict["surface":pygame.Surface,"pos":any]] or numpy[dict["surface":pygame.Surface,"pos":any]])=None):
    pos = self.body.get_rect().move(pos)
    self.screen.fill([0,0,0])
    self.screen.blit(self.lastscreen,(0,0))
    if remain != None:
        for i in remain:
            self.screen.blit(i["surface"],i["pos"])
    self.screen.blit(self.body,pos)
    pygame.display.flip()
运行结果及报错内容

i["surface"]并没有像我想象中的那样被vscode看作pygame.Surface,我不能得到对应的语法提示

我的解答思路和尝试过的方法

我尝试将这个dict定义为一个新的类sfdict,我是这样写的

class sfdict:
    def __init__(self, surface:pygame.Surface, pos) -> None:
        self.surface = surface
        self.pos = pos
        pass
    def s(self) -> dict[pygame.Surface,any]:
        return {
            "surface": self.surface,
            "pos": self.pos
        }

而后发现不行,于是我改成了问题步骤2(用代码块功能插入代码,请勿粘贴截图)中的代码,发现仍然不行

我想要达到的结果

我希望我的vscode会把我问题步骤2(用代码块功能插入代码,请勿粘贴截图)提及代码中的 i["surface"] 看作一个pygame.Surface,而不是仅仅认为i是一个dict