繁体   English   中英

使用Typescript,键入guard和reflection来根据类型验证对象

[英]Using Typescript, Type guard and reflection to validate objects against types

我试图干,通过使用ES6,Typescript,我创建了一个接口,称之为具有属性的IUser。

  • 在运行时知道对象是否符合接口的最佳方法是什么?
  • 如何获取错误列表? IDE知道哪些属性丢失,为什么我不能?

我见过使用反射和其他技术的例子,它们一次测试一个属性。 但是必须有一种方法可以很容易地知道一个对象是否实现了所有属性,如果不是哪个属性。

知道某些属性是可选的'?' 我们知道类型,这应该是可能的!

type IUser = {
    name: string
    age?: number
    gender: string | any
}

// Assume this object gets created at runtime.
let john = {
    name: "John"
}

let errors = ValidateThis(john, IUser)
// Return something like this ["Error: Missing value gender", "Warning: Missing optional value age"]
  • 我不想指定每个属性,因此必须有一种方法来迭代类型属性。
  • 我不想使用我发现的任何强制我创建的现有npm项目,而是使用单独的模式文件或使用类。

你不是第一个要求这个的人。 接口在运行时不存在,因为TS在编译期间完全擦除所有类型信息

但是,ECMAScript标准跟踪了一个反射API,并且TypeScript随身携带。 实现此目的的最佳选择是使用experimentalDecoratorMetadata自动使用类型信息装饰类,然后在运行时使用反射API进行验证。 (Ctrl-f并搜索experimentalDecoratorMetadata )。

这不存在。 您应该使用现有的NPM项目之一,或者编写另一个项目。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM