首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何使用TypeScript实现对象验证?

如何使用TypeScript实现对象验证?
EN

Stack Overflow用户
提问于 2017-06-01 10:10:08
回答 2查看 10.2K关注 0票数 5

我有一个Express API服务器应用程序和一个React客户端应用程序,它们都是用TypeScript实现的。我使用TypeScript接口定义了我的数据模型,并且在系统的两端都使用了这些接口。然而,TypeScript接口只是编译时特性,我还需要运行时类型检查,例如验证HTTP POST data (json)是否符合定义的数据结构。

所以我的问题是,我如何能够/应该利用TypeScript提供的功能来实现运行时对象验证?

EN

回答 2

Stack Overflow用户

发布于 2018-03-24 23:18:49

我已经创建了一个名为Smoke Screen的超轻量级库,它就是这样做的。它利用typescript特性在javascript运行时执行任何类型的对象验证。它不是100%无缝的,因为javascript在运行时不保存任何类型信息,但多亏了TypeScript装饰器,这可能很容易做到:

代码语言:javascript
复制
class Person {

    @exposed({type: Number})
    age: number;

}

// serialize a Person object into a JSON string
const person = new Person();
person.age = 56.8;
const smokeScreen = new SmokeScreen();
smokeScreen.toJSON(person); // -> '{"age":56.8}'

// deserialize a JSON string into a Person object
let json = JSON.stringify({age: 19});
const person2 = smokeScreen.fromJSON(json, Person);
console.log(person2); // -> Person { age: 19 }

// typing validation
json = JSON.stringify({age: "oops"});
smokeScreen.fromJSON(json, Person); // Error: illegal input - property 'age' must be a number

可以设置其他自定义验证器,还支持并强制执行可选参数和null检查。我建议阅读更多关于它的知识,并尝试一下。

票数 2
EN

Stack Overflow用户

发布于 2020-03-10 05:54:27

我知道这个问题已经过时了,但我刚刚使用装饰器为JSON对象和typescript编写了自己的验证器。可在此处获得:ts-json-object

示例:

代码语言:javascript
复制
import {JSONObject,required,optional,lt,gte} from 'ts-json-object'

class Person extends JSONObject {
    @required // required
    name: string
    @optional // optional!
    @lt(150) // less than 150
    @gte(0) // Greater or equal to 0
    age?: number
}

let person = new Person({
 name: 'Joe'
}) // Ok
let person = new Person({
}) // Will throw a TypeError, because name is required
let person = new Person({
 name: 123
}) // Will throw a TypeError, because name must be a string

具有许多其他功能,如自定义验证等。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44297397

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档