Python 3.x 在Python中实现Typescript接口

Python 3.x 在Python中实现Typescript接口,python-3.x,python-dataclasses,python-class,Python 3.x,Python Dataclasses,Python Class,我正在寻找一些关于在Python中实现一组仅数据值的“接口”的最佳方法的建议,这些“接口”相当于它们的typescript对应物(我们有一个项目,在这个项目中,我们同时使用这两种语言,并希望为它们的通信强制执行一个一致的接口,这将是通过将python序列化为json来拉入TS组件) 接口将是组合,以保持模块化和简单 给定一组TS接口,定义为: interface TestOutput { phantom: string testDateTime: datetime author: s

我正在寻找一些关于在Python中实现一组仅数据值的“接口”的最佳方法的建议,这些“接口”相当于它们的typescript对应物(我们有一个项目,在这个项目中,我们同时使用这两种语言,并希望为它们的通信强制执行一个一致的接口,这将是通过将python序列化为json来拉入TS组件)

接口将是组合,以保持模块化和简单

给定一组TS接口,定义为:

interface TestOutput {
  phantom: string
  testDateTime: datetime
  author: string
  result: boolean
  report_summaryFile?: string // the '?' means this field is optional
  // ... more values
  series: Array<Series>
  soloImages: Array<Images>
}

interface Series {
  number: number
  filter: string
  kernel: string
  // ... more values
  images: Array<TestImage>
}

数据类是实现这一点的最佳方法吗?

pydantic是一个很好的库。
我做了类似的事情,但只针对数据类-ValidatedDC:

从数据类导入数据类
从输入导入列表开始
从已验证的\u dc导入已验证的dc
导入json
@数据类
类别系列(EDDC):
系列编号:int
形态:str
描述:str=''
@数据类
类输出(ValidatedDC):
幻影:str
日期(时间):str
作者:str
结果:布尔
系列:列表[系列]
报告摘要文件:str=''
#例如,通过API,我们得到了一个JSON字符串:
输入_json_字符串=“”
{
“幻影”:“测试幻影”,
“日期和时间”:“2020.01.01”,
“作者”:“彼得”,
“结果”:正确,
“系列”:[{
“系列编号”:1,
“模态”:“测试模态”
}]
}
'''
#将字符串加载到字典中:
input_data=json.load(input_json_字符串)
#然后创建一个数据类来检查值的类型和
#进一步处理数据的便利性:
输出=输出(**输入数据)
#由于获得了有效数据,因此没有错误
断言输出。get_errors()为无
#假设我们得到的数据有错误:
输入数据['series'][0]['series_num']=“1”#字符串不是整数!
输出=输出(**输入数据)
断言输出。获取_错误()
打印(输出。获取错误()
# {
#“系列”:[
#InstanceValidationError(
#value_repr=“{'series_num':'1','modal…}”,
#值类型=,
#注释=,异常=无,
#错误={
#“序列号”:[
#基本验证错误(
#值\u repr='1',值\u类型=,
#注释=,异常=无
#                    )
#                ]
#            }
#        ),
#ListValidationError(
#item_index=0,item_repr=“{'series_num':'1','modal…}”,
#项目类型=,注释=
#        )
#    ]
# }
有关更多详细信息,请参见此处:

听起来很合理。您可以将任何数据类实例插入
json.dumps(dataclass.as_dict(my_实例))中
要从中获取有效的json字符串,如果您在运行时需要实际的类型断言而不是类型注释,您可以转换为使用。@Arne-太好了-谢谢您的想法。我将检查pydantic outSure,但请注意,
数据类。数据类
只是一种使用较少样板创建常规类的方法
from dataclasses import dataclass
from typing import List
import datetime

@dataclass
class TestSeries:
    seriesNum: int 
    modality: str 
    description: str = ''

@dataclass
class TestOutput:
    phantom: str 
    testDateTime: datetime.datetime
    author: str 
    result: bool
    series: List[TestSeries]
    soloImages: List[Images]
    report_summaryFile: str = ''