TypeScript 运行时复杂类型验证

2020-08-02 16:52:18 +08:00
 pseudo

最近在用 TypeScript 开发后端服务,遇到了一个棘手的问题:如何在运行时快速地验证请求中的数据并推导为所需的强类型变量?

直接的想法大概长这样:

不出意外,这样下去很快代码会出现很多类似判断并变得十分臃肿。经过一番搜索,发现虽然 TypeScript 允许自定义 type guard,但并不提供原生的运行时验证库(也确实不应该在 TypeScript 层面解决这个问题)。于是自己动手开发了一个工具库 power-guard ,它的语法是这样:

它提供多种内置函数,基本覆盖大部分常用的基础 /复杂类型的验证:object,array,enum,number,string,boolean,同时你可以进行自由定制来验证更为复杂的对象:

再也不用担心用户乱输入了。:-)

Github Repo 链接

4912 次点击
所在节点    程序员
25 条回复
MrKou47
2020-08-03 11:12:46 +08:00
ts 哪有运行时啊...ts 现在不都是跑在 js 运行时里面吗
Yumwey
2020-08-03 11:14:20 +08:00
这个实现的库太多了,参考:mobx-state-tree, 简称 MST
Yumwey
2020-08-03 11:15:05 +08:00
还有:ts 没有所谓的运行时。
azh7138m
2020-08-03 13:38:27 +08:00
@Anthony117
> API 设计得挺有趣的

prop-types 这一脉的类型校验,不都是这个风格的 API 吗


我也觉的从类型声明上直接导出 json schema 再做校验应该会更好
本来我就写了类型声明,为什么还要再定义一次类型校验的规则
yaphets666
2020-08-03 13:40:57 +08:00
运行时是 JS 没有你想的类型验证那些 哈哈哈

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/695040

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX