py ts接口
python到typescript接口
这是什么?
这个库提供了一些实用程序,可以将python数据类转换为
对typescript接口的注释并将它们序列化为文件。
安装python --version # requires 3.7+
pip install py-ts-interfaces
动机
在后台使用python和typescript的web应用程序中
在前端,通常情况下,客户端将调用
后端请求一些具有特定预定义"形状"的数据。上
客户端,通常为该数据定义一个接口
后端作者使用typechecking,比如使用mypy
项目作者也可能正在键入json响应值。
这会导致代码重复。如果后端的形状改变,
相关接口也必须在前端反映其更改。AT
最好,这是恼人的维护。最坏的情况是,随着时间的推移,接口可能
分散并引起错误。
这个图书馆的目的是要有一个单一的真理来源来描述
后端和前端之间的有效负载。
用法
在python中,py ts interfaces公开了一个名为interface的新类对象。
通过子类化这个对象,您可以识别出
希望将其序列化为接口文件。首先,连接数据类:# views.py
from dataclasses import dataclass
from py_ts_interfaces import Interface
@dataclass
class MyComponentProps(Interface):
name: str
show: bool
value: float
@dataclass
class WillNotGetPickedUp: # this doesn't subclass Interface, so it won't be included
name: str
value: float在shell中,运行包含的命令并传入文件名或
要使用的目录。默认情况下,它将输出到
名为interface.ts的目录$ py-ts-interface views.py
Created interface.ts!
您还可以使用以下参数:-o,--output[filepath]:保存文件的位置。默认为interface.ts
-a,--append:默认情况下,每次运行都将覆盖输出文件。这一面旗帜
只允许追加。请注意,不测试重复的接口。生成的文件将如下所示:// interface.ts
interface MyComponentProps {
name: string;
show: boolean;
value: number;
}
为什么是@dataClass?
dataclasses是在python 3.7中引入的,它们非常棒。一些
我见过其他代码库使用的替代方法是namedtuple和
键入ddict。所有这些对象都试图做同一件事:组合在一起
像结构一样紧密相连的数据片段。
但是,数据类胜过其他两个,原因如下:数据类是python内置的。在编写时,namedtuple也是
内置到输入模块中,但仍考虑使用typeddict
实验性。
不能像使用
namedtuple和typeddict,例如,namedtuple可以使用类定义
继承类似于类mynamedtuple(namedtuple):…,但也类似于
mynamedtuple=namedtuple('mynamedtuple',[('name',str),('id',int])。
这是件好事。数据类要求使用类样式
声明,它不仅看起来更接近typescript接口
声明,但它避免了命名为
typeddicts用来获得它的所有特性。因为这个库使用
对代码进行ast和静态分析,以确定要序列化的数据,
这使得选择成为一个无需考虑的问题。
通过设置frozen=true,可以使数据类成为不可变的(大多数情况下)。
此库不需要它,但在以后的版本中,我们可能会提供
partialed保证不变性的数据类装饰符。
因为我们避免了namedtuples和typeddicts的元类机器,所以
打开了编写自定义类的可能性,该类允许
用一种方法进行类型检查,但是给ast解析器一些提示,以便生成不能用python轻松表示的typescript类型。
为什么用python而不是typescript定义类型?
typescript在输入语法方面比python成熟得多。
一般来说,python可以在typescript中表示任何类型,
但不是反之亦然。
因此,在python中定义类型可以保证您还可以表达
两种语言的接口。
支持的类型映射
请注意,下表中的tu和v表示
实际类型的代理。它们并不表示实际使用泛型类型
变量。
巨蟒打印脚本< /广告>
无空值
str字符串
int编号
浮动编号
复杂编号
布尔值布尔值
列表阵列<;任意>;
元组[任意]
列表[t]阵列[t]
元组[t,u][t,u]
可选[t]t空
工会[t,u,v]t u v
计划支持的映射字符串文本
未定义类型
ISNAN类型
只读类型
多余属性
不支持/拒绝的映射
这个库的主要目的是帮助输入,首先是,数据
在客户端和服务器之间来回移动。这些特性中的许多,无论是特定于typescript还是python,都将无法支持。空隙
可调用/函数
枚举
日期、日期时间、日期、时间(将它们作为字符串发送,并将它们转换为客户端上更丰富的对象)
扩展
泛型,类型变量
交叉点类型
映射类型
条件类型
课程