当前位置: 首页 > 知识库问答 >
问题:

如何使用typescript实现对象验证?

陶朝明
2023-03-14

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

共有1个答案

燕昊东
2023-03-14

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

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

可以设置额外的自定义验证器,还支持并强制执行可选参数和空值检查。我建议多读一些关于它的书,并尝试一下。

 类似资料:
  • 问题内容: 我从AJAX调用REST服务器收到一个JSON对象。该对象具有与我的TypeScript类匹配的属性名称 初始化它的最佳方法是什么?我认为这行不通,因为类(和JSON对象)具有作为对象列表的成员和作为类的成员,而这些类具有作为列表和/或类的成员。 但是我更喜欢一种查找成员名称并在其间进行分配,创建列表并根据需要实例化类的方法,因此,我不必为每个类中的每个成员编写明确的代码(有很多!)

  • 问题内容: 指针是仅用于实现Java参考变量还是实际上如何实现?以下是Java语言规范中的代码行 4.3.1对象对象是类实例或数组。引用值(通常只是引用)是指向这些对象的指针,还有一个特殊的空引用,它不引用任何对象。 这是否意味着一直都是指针? 问题答案: 在现代JVM中,引用被实现为地址。 回到HotSpot的第一个版本(对于“经典VM”来说更早一些),引用被实现为句柄。那是指向指针的固定指针。

  • 本文向大家介绍如何实现对象克隆?相关面试题,主要包含被问及如何实现对象克隆?时的应答技巧和注意事项,需要的朋友参考一下 实现 Cloneable 接口并重写 Object 类中的 clone() 方法。 实现 Serializable 接口,通过对象的序列化和反序列化实现克隆,可以实现真正的深度克隆。

  • 问题内容: 我目前正在尝试将收到的JSON对象转换为具有相同属性的TypeScript类,但无法使其正常工作。我究竟做错了什么? 员工阶层 员工字符串 我的尝试 链接到打字稿游乐场 问题答案: 编译器允许您将返回的对象强制转换为类的原因是因为typescript基于结构子类型。 您实际上并没有的实例,而是拥有一个具有相同属性的对象(如在控制台中看到的)。 一个简单的例子: (操场上的代码) 没有错

  • 我是Angular2的新手,我正在尝试循环一个JSON对象,这个对象是我从GET请求返回的,但无法完成它。 我的JSON对象: 我有棱角的剧本的一部分: 我确实把数据拿回来了--这太好了。但是,我想将ID推入一个数组。在Javascript中,我会这样做: 推后阵: 我正在苦苦寻找一种方法来用Angular2实现同样的结果。如有任何帮助,我们将不胜感激!

  • 主要内容:TypeScript,JavaScript,TypeScript 类型模板,TypeScript,JavaScript,TypeScript,JavaScript,鸭子类型(Duck Typing)对象是包含一组键值对的实例。 值可以是标量、函数、数组、对象等,如下实例: var object_name = { key1: "value1", // 标量 key2: "value", key3: function() { // 函数 }, key4:["content1", "cont