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编号

浮动编号

复杂编号

布尔值布尔值

列表阵列&lt;任意&gt;

元组[任意]

列表[t]阵列[t]

元组[t,u][t,u]

可选[t]t空

工会[t,u,v]t u v

计划支持的映射字符串文本

未定义类型

ISNAN类型

只读类型

多余属性

不支持/拒绝的映射

这个库的主要目的是帮助输入,首先是,数据

在客户端和服务器之间来回移动。这些特性中的许多,无论是特定于typescript还是python,都将无法支持。空隙

可调用/函数

枚举

日期、日期时间、日期、时间(将它们作为字符串发送,并将它们转换为客户端上更丰富的对象)

扩展

泛型,类型变量

交叉点类型

映射类型

条件类型

课程