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

使用pydantic-to-typescript生成TS接口时遇AttributeError问题求助

解决pydantic-to-typescript生成TypeScript接口的报错问题

使用pydantic-to-typescript工具从Python类生成TypeScript接口时,先后遇到两个报错:

  • 用pydantic dataclass定义类时,执行命令pydantic2ts --module ./model/client.py --output client.ts出现AttributeError: Config
  • 改用BaseModel定义后,出现AttributeError: __concrete__

已全局安装json-schema-to-typescript依赖,相关代码及错误信息如下:

原dataclass代码及错误

代码

from pydantic.dataclasses import dataclass

@dataclass
class Client:
    clientId: str
    clientName: str

错误信息

C:\Users\user\.virtualenvs\pdf-creator-HARGFuzC\Lib\site-packages\pydantic\_migration.py:283: UserWarning: `pydantic.generics:GenericModel` has been moved to `pydantic.BaseModel`.
  warnings.warn(f'`{import_path}` has been moved to `{new_location}`.')
2023-12-29 03:41:03,954 Finding pydantic models...
2023-12-29 03:41:04,034 Generating JSON schema from pydantic models...
Traceback (most recent call last):
  File "<frozen runpy>", line 198, in _run_module_as_main
  File "<frozen runpy>", line 88, in _run_code
  File "C:\Users\user\.virtualenvs\pdf-creator-HARGFuzC\Scripts\pydantic2ts.exe\__main__.py", line 7, in <module>
  File "C:\Users\user\.virtualenvs\pdf-creator-HARGFuzC\Lib\site-packages\pydantic2ts\cli\script.py", line 274, in main
    return generate_typescript_defs(
           ^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\user\.virtualenvs\pdf-creator-HARGFuzC\Lib\site-packages\pydantic2ts\cli\script.py", line 208, in generate_typescript_defs
    schema = generate_json_schema(models)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\user\.virtualenvs\pdf-creator-HARGFuzC\Lib\site-packages\pydantic2ts\cli\script.py", line 165, in generate_json_schema
    master_model.Config.extra = Extra.forbid
    ^^^^^^^^^^^^^^^^^^^
  File "C:\Users\user\.virtualenvs\pdf-creator-HARGFuzC\Lib\site-packages\pydantic\_internal\_model_construction.py", line 215, in __getattr__
    raise AttributeError(item)
AttributeError: Config

改用BaseModel后的代码及错误

代码

from pydantic import BaseModel

class Client(BaseModel):
    clientId: str
    clientName: str

错误信息

C:\Users\user\.virtualenvs\pdf-creator-HARGFuzC\Lib\site-packages\pydantic\_migration.py:283: UserWarning: `pydantic.generics:GenericModel` has been moved to `pydantic.BaseModel`.
  warnings.warn(f'`{import_path}` has been moved to `{new_location}`.')
2023-12-29 03:42:23,101 Finding pydantic models...
Traceback (most recent call last):
  File "<frozen runpy>", line 198, in _run_module_as_main
  File "<frozen runpy>", line 88, in _run_code
  File "C:\Users\user\.virtualenvs\pdf-creator-HARGFuzC\Scripts\pydantic2ts.exe\__main__.py", line 7, in <module>
  File "C:\Users\user\.virtualenvs\pdf-creator-HARGFuzC\Lib\site-packages\pydantic2ts\cli\script.py", line 274, in main
    return generate_typescript_defs(
           ^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\user\.virtualenvs\pdf-creator-HARGFuzC\Lib\site-packages\pydantic2ts\cli\script.py", line 201, in generate_typescript_defs
    models = extract_pydantic_models(import_module(module))
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\user\.virtualenvs\pdf-creator-HARGFuzC\Lib\site-packages\pydantic2ts\cli\script.py", line 81, in extract_pydantic_models
    for _, model in inspect.getmembers(module, is_concrete_pydantic_model):
                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\user\AppData\Local\Programs\Python\Python312\Lib\inspect.py", line 607, in getmembers
    return _getmembers(object, predicate, getattr)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\user\AppData\Local\Programs\Python\Python312\Lib\inspect.py", line 598, in _getmembers
    if not predicate or predicate(value):
                        ^^^^^^^^^^^^^^^^
  File "C:\Users\user\.virtualenvs\pdf-creator-HARGFuzC\Lib\site-packages\pydantic2ts\cli\script.py", line 69, in is_concrete_pydantic_model
    return bool(obj.__concrete__)
                ^^^^^^^^^^^^^^^^
  File "C:\Users\user\.virtualenvs\pdf-creator-HARGFuzC\Lib\site-packages\pydantic\_internal\_model_construction.py", line 215, in __getattr__
    raise AttributeError(item)
AttributeError: __concrete__

解决方案

原因分析

当前pydantic-to-typescript工具的官方版本未适配Pydantic v2,Pydantic v2重构了内部实现,移除了__concrete__属性,同时Config类的访问方式也发生了变化,导致工具调用失败。

解决方式

方式1:降级到Pydantic v1.x

卸载当前Pydantic版本,安装兼容的v1版本:

pip uninstall -y pydantic
pip install pydantic==1.10.13

之后重新运行pydantic2ts命令即可正常生成TypeScript接口。

方式2:使用支持Pydantic v2的替代工具

推荐使用datamodel-code-generator,该工具支持Pydantic v2,安装及使用命令如下:

pip install datamodel-code-generator
datamodel-codegen --input ./model/client.py --output client.ts

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 11:17:50