在运行时强制执行类型

Enforce a type at runtime

我有一个 user 模型 class 看起来像这样 :

{
   firstName: string;
   lastName: string;
   someSwitch: boolean;
}

如果我声明一个用户,class 是默认强制执行的,并且会在编译时失败:

fooUser : User = {
   firstName: string;
   lastName: string;
}

会失败,因为需要定义 someSwitch(除非在 class 中将其标记为可选)

我如何在不独立测试每个字段的情况下强制在运行时遵守此模型,因为这在 运行 时工作得很好:

someJson = {
   firstName: string;
   lastName: string;
}

fooUser : User = someJson;

我能做的就是简单地为 User 创建一个构造函数并在其中分配所有强制性内容,然后在需要时创建对象,但是必须为一个简单的数据模型创建一个构造函数似乎很奇怪,也许我只是看得更远,这是正确的解决方案。

不幸的是,如果不测试所需的属性,就无法在 js 中执行此操作。您可以进行 typeof(x) 检查,但这仅对基本类型(对象、字符串、数字、布尔值)有帮助。

编辑

经过进一步研究,我认为您实际上可以使用 instanceof 运算符来执行类似的操作。

The instanceof operator tests the presence of constructor.prototype in object's prototype chain.