各位彦祖好,最近在把一个 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/compare50/_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-05 14:46:50 +08:00
|
2
gouflv 2021-12-05 16:39:31 +08:00 via iPhone
class-transformer + class-validator
|
3
pengtdyd 2021-12-05 17:09:07 +08:00
改啥改,又不是不能用
|