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

定义TypedDict时引用其他TypedDict属性报错:illegal target for annotation

解决TypedDict间属性引用的语法错误

你写的代码报错是因为TypedDict的字段定义语法不支持'Detail.to_date': Optional[str]这种写法,下面分几种常见场景给出解决方案:

场景1:复用另一个TypedDict的字段类型

如果想让Overview的某个字段和Detail里的字段类型保持一致,直接通过索引引用目标TypedDict的类型即可:

from typing import TypedDict, Optional

class Detail(TypedDict):
    id: Optional[str]
    to_date: Optional[str]
    from_date: Optional[str]
    
class Overview(TypedDict):
    id: Optional[str]
    # 复用Detail中to_date的类型
    to_date: Detail['to_date']

场景2:继承另一个TypedDict的所有字段

如果想让Overview直接拥有Detail的全部字段,再添加自己的额外字段,让Overview继承Detail即可:

from typing import TypedDict, Optional

class Detail(TypedDict):
    id: Optional[str]
    to_date: Optional[str]
    from_date: Optional[str]
    
class Overview(Detail):
    # 这里可以添加Overview独有的字段,比如
    summary: Optional[str]

特殊场景:字段名确实是'Detail.to_date'

如果你的需求是字段名就是字符串'Detail.to_date'(这种情况很少见),需要通过__annotations__字典来定义,因为直接在类里写带点的字符串字段名会触发语法错误:

from typing import TypedDict, Optional

class Detail(TypedDict):
    id: Optional[str]
    to_date: Optional[str]
    from_date: Optional[str]
    
class Overview(TypedDict):
    id: Optional[str]

# 动态添加带特殊字符的字段名
Overview.__annotations__['Detail.to_date'] = Optional[str]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 17:04:54