Python:将变量注释为TypedAct的键

Python:将变量注释为TypedAct的键,python,mypy,python-typing,Python,Mypy,Python Typing,基本上是一个(尚未回答的)问题的浓缩版本 我想声明一个变量应该只接受TypedDict中的键值 目前,我正在定义一个单独的Literal类型来表示键,例如: 从键入import Literal、TypedDict 类别MyTD(类型Ddict): a:整数 b:int mytd=mytd(a=1,b=2) key=“a” mytd[key]#错误:TypedDict key必须是字符串文字;应为('a','b'中的一个) MyTDKeyT=文字[“a”,“b”] 键入的密钥:MyTDKeyT=“

基本上是一个(尚未回答的)问题的浓缩版本

我想声明一个变量应该只接受
TypedDict
中的键值

目前,我正在定义一个单独的
Literal
类型来表示键,例如:

从键入import Literal、TypedDict
类别MyTD(类型Ddict):
a:整数
b:int
mytd=mytd(a=1,b=2)
key=“a”
mytd[key]#错误:TypedDict key必须是字符串文字;应为('a','b'中的一个)
MyTDKeyT=文字[“a”,“b”]
键入的密钥:MyTDKeyT=“b”
mytd[键入的密钥]#无错误
我希望能够替换
Literal
定义,以实现最小化重复代码的所有常见原因

伪代码:

key:key[MyTD]=“a”
mytd[key]#不会出错
非U键:键[MyTD]=“z”#错误
有没有办法做到这一点


为了澄清,鉴于mypy可以告诉我键类型需要是“a”或“b”的文字,我希望有一种不太容易出错的方法来将变量注释到该类型,而不是在
TypedDict
定义中,必须同时维护两个单独的键列表,一旦出现在
文字定义中。

似乎是已知的issue@IainShelvington我不认为这是OP的问题。他们希望能够用
TypedDict
type中的内容替换文本类型定义
key='a'
必须推断出mypy正确识别为错误的
str
。事实上,我们可以看到固定的行为above@IainShelvington这个问题似乎是关于让mypy认识到存储在变量中的字符串文本应该被允许作为检索值的键。它演变为建议我当前使用的确切用例(定义不同的
Literal
Final
类型)。