You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为TypedDict实例的键实现程序化类型标注?

为TypedDict的键自动生成类型标注的方案

方案1:使用Python 3.12+内置的KeyOf类型(推荐)

Python 3.12引入了typing.KeyOf类型,它可以直接提取TypedDict的所有键作为合法的字面量类型,无需手动维护键列表。

示例代码:

from typing import TypedDict, KeyOf


class Data(TypedDict):
    one: str
    two: str


class MyClass:
    def __init__(self, data: Data) -> None:
        self.data = data

    def value(self, key: KeyOf[Data]) -> str:
        return self.data[key]

当你给Data新增键(比如three: str),key参数的类型会自动包含新键,无需手动更新value方法的类型标注。

方案2:兼容旧版本Python(使用typing_extensions.KeyOf)

如果你的Python版本低于3.12,可以通过typing_extensions库使用KeyOf功能,先安装依赖:

pip install typing_extensions

示例代码:

from typing import TypedDict
from typing_extensions import KeyOf


class Data(TypedDict):
    one: str
    two: str


class MyClass:
    def __init__(self, data: Data) -> None:
        self.data = data

    def value(self, key: KeyOf[Data]) -> str:
        return self.data[key]

方案3:动态提取键生成Literal类型(兼容所有版本)

如果你不想依赖额外库,可以通过get_type_hints动态提取TypedDict的键,生成对应的Literal类型别名:

from typing import Literal, TypedDict, get_type_hints


class Data(TypedDict):
    one: str
    two: str


# 自动提取Data的所有键生成Literal类型
DataKeys = Literal[tuple(get_type_hints(Data).keys())]


class MyClass:
    def __init__(self, data: Data) -> None:
        self.data = data

    def value(self, key: DataKeys) -> str:
        return self.data[key]

注意:部分静态类型检查器(如mypy)对这种动态生成的Literal类型支持有限,优先推荐前两种方案。

泛型扩展:支持任意TypedDict类型

如果你的类需要适配多种TypedDict类型,可以结合泛型实现更通用的方案:

from typing import TypedDict, KeyOf, Generic, TypeVar

# 定义绑定到TypedDict的类型变量
TD = TypeVar('TD', bound=TypedDict)


class Data(TypedDict):
    one: str
    two: str


class MyClass(Generic[TD]):
    def __init__(self, data: TD) -> None:
        self.data = data

    def value(self, key: KeyOf[TD]) -> str:
        return self.data[key]


# 使用示例
data: Data = {'one': 'hello', 'two': 'world'}
obj = MyClass[Data](data)
obj.value('one')  # 类型检查通过
# obj.value('three')  # 类型检查报错,符合预期

内容的提问来源于stack exchange,提问作者Maxim Ivanov

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 09:17:15