【发布时间】:2023-03-08 15:09:01
【问题描述】:
我想知道在使用 TypeScript 时是否有任何工具或技术用于对对象数据进行低级别验证。一个示例是 HTTP 服务上的 POST 请求的 JSON 正文。通常,我为预期数据创建了一个接口,然后将数据转换为该接口,但我知道这是肤浅的。
例子:
router.route('/supercres')
.get((req, res, next) => {
const typedBody = <SuperCresBody>req.body;
})
interface SuperCresBody {
name: string,
yoyo: boolean,
}
强制执行接口的问题在于 TypeScript 只是一个编译时概念,在运行时不强制执行任何操作。知道这一点,我很好奇是否有人找到了一种无需大量样板或工具的聪明方法,以便在运行时对这些事情进行类型检查,而不必重复接口契约作为一组命令式检查作为验证步骤。
在一个有点相关的注释中,在most recent episode of Functional Geekery 中,Matthias Felleisen 在剧集结尾附近的 Typed Racket 中解释了类似的需求。
相关阅读:
【问题讨论】:
-
运行时检查的问题是它会消耗你的CPU资源来执行。不过还是可以的。
-
@BotMaster,我不希望运行时类型检查所有内容,但主要检查来自应用程序边界的数据(例如 HTTP 请求、文件 I/O)。我不介意手动操作,这是无论如何都必须完成的,但利用 TypeScript 中类型注释提供的类型信息会很好。
-
请看我对this question的回答。现在可以对 TypeScript 中的接口进行运行时检查。
标签: typescript runtime-error static-typing