TypedDict中的Python任意键

wnrlj8wa  于 2023-10-15  发布在  Python
关注(0)|答案(1)|浏览(118)

有没有可能用一组已知的键和一个任意键的类型来创建一个TypedDict?例如,在TypeScript中,我可以这样做:

interface Sample {
  x: boolean;
  y: number;

  [name: string]: string;
}

Python中的等价物是什么?
编辑:我的问题是,我创建了一个函数的参数期望类型为Mapping[str, SomeCustomClass]的库。我想改变类型,这样就有了特殊的键,其中的类型如下所示:

  • labels: Mapping[str, str]
  • aliases: Mapping[str, List[str]]

但我希望它仍然是一个任意Map,如果一个键不在上面的两个特殊情况下,它应该是SomeCustomClass类型。要做到这一点,有什么好办法呢?如果有替代方案,我对做出向后不兼容的更改不感兴趣。

mf98qq94

mf98qq941#

使用Union类型操作符可以做到这一点,但不幸的是,使用此解决方案,您将无法检查必需的字段:

from typing import TypedDict, Union, Dict

class SampleRequiredType(TypedDict, total=True):
  x: bool
  y: int

SampleType = Union[SampleRequiredType, Dict]

# Now all these dictionaries will be valid:

dict1: SampleType = {
  'x': True,
  'y': 123
}

dict2: SampleType = {
  'x': True,
  'y': 123
  'z': 'my string' 
}

dict3: SampleType = {
  'z': 'my string' 
}

相关问题