
各位彦祖好,最近在把一个 python 写的项目改写成 typescript
发现原始 python 代码里面使用了大量的 attr.ib(),在 attr.ib()里面有很多的参数比如 cmp ,factory ,converter ,validator 等等。
初步想法是用 ts class 的 constructor 来实现类似的功能,但是这样的话上面提到的细节参数都需要有单独的验证和处理,请问有什么适用于 typescript 类似于 attr 的库方便实现这样的功能吗?
attrs 的官方文档 : https://www.attrs.org/en/stable/
看完官方文档和例子感觉有点像 java 的 lombok
一段例子如下:
https://github.com/cs50/compare50/blob/main/compare5/_data.py#L114-L149
@attr.s(slots=True, frozen=True) class Submission: """ :ivar path: the file path of the submission :ivar files: list of :class:`compare50.File` objects contained in the submission :ivar preprocessor: A function from tokens to tokens that will be run on \ each file in the submission :ivar id: integer that uniquely identifies this submission \ (submissions with the same path will always have the same id). Represents a single submission. Submissions may either be single files or directories containing many files. """ _store = IdStore(key=lambda sub: (sub.path, sub.files, sub.large_files, sub.undecodable_files)) path = attr.ib(cOnverter=pathlib.Path, cmp=False) files = attr.ib(cmp=False) large_files = attr.ib(factory=tuple, cOnverter=_to_path_tuple, cmp=False, repr=False) undecodable_files = attr.ib(factory=tuple, cOnverter=_to_path_tuple, cmp=False, repr=False) preprocessor = attr.ib(default=lambda tokens: tokens, cmp=False, repr=False) is_archive = attr.ib(default=False, cmp=False) id = attr.ib(init=False) def __attrs_post_init__(self): object.__setattr__(self, "files", tuple( [File(pathlib.Path(path), self) for path in self.files])) object.__setattr__(self, "id", Submission._store[self]) def __iter__(self): return iter(self.files) @classmethod def get(cls, id): """Retrieve submission corresponding to specified id""" return cls._store.objects[id] 1 Opportunity 2021 年 12 月 5 日 |
2 gouflv 2021 年 12 月 5 日 via iPhone class-transformer + class-validator |
3 pengtdyd 2021 年 12 月 5 日 改啥改,又不是不能用 |