我正在尝试通过使用 ES6、Typescript 来 DRY,我创建了一个接口(interface),将其称为具有属性的 IUser。
- 在运行时了解对象是否符合接口(interface)的最佳方法是什么?
- 如何获得错误列表? 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 项目,这会迫使我创建一个单独的架构文件或使用一个类。
最佳答案
您不是第一个提出此要求的人。接口(interface)在运行时不存在,因为 TS fully erases all type information在编译期间。
但是,ECMAScript 有一个符合标准的反射 API,TypeScript 也有它。实现此目的的最佳选择是使用 experimentalDecoratorMetadata
自动使用类型信息装饰您的类,然后使用 reflection API在运行时进行验证。 (Ctrl-f 并搜索 experimentalDecoratorMetadata
)。
关于javascript - 使用 Typescript、类型保护和反射来根据类型验证对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43123735/