在运行时强制执行类型
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.
我有一个 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.