我想知道在JavaScript中验证对象形状的简单方法。
现在,我有一个验证端点对象形状的函数,就像这样:
function validateEndpointShape(endpoint: any, hasId: boolean): boolean
{
return endpoint
&& (hasId ? typeof endpoint.id === 'string' : true)
&& typeof endpoint.name === 'string'
&& typeof endpoint.description === 'string'
&& typeof endpoint.url === 'string'
&& GenericApiEndpointMethods[endpoint.method] !== undefined
&& ApiEndpointTypes[endpoint.apiEndpointType] !== undefined
&& endpoint.group
&& typeof endpoint.group.groupPublicKey === 'string'
&& typeof endpoint.group.groupName === 'string'
&& typeof endpoint.reason === 'string'
&& typeof endpoint.isPublic === 'boolean'
&& typeof endpoint.isActive === 'boolean'
&& authTypes[endpoint.authType] !== undefined
&& Array.isArray(endpoint.parameters)
&& Array.isArray(endpoint.headers);
}
这可能会变得繁琐和不易掌握。我不想为每个创建的对象都这样做。
当一个端点进入我们的云firebase函数时,我们必须对其进行一系列验证,以便我们知道何时拒绝错误数据。端点的形状是其中之一。
我尝试了这样做:
Delete req.body.reason;
req.body[‘extraField’] = ‘xxx’;
Const endpoint: GenericApiEndpoint = req.body;
console.log(‘endpoint =‘, endpoint);
但是 JavaScript 并不在意。它将接受一个没有原因(必填字段)和 extraField(模型中不存在的字段)的端点,并将其分配给一个类型为 GenericApiEndpoint 的对象。端点将打印出 without reason 和 with extraField。
我还尝试过:
Const endpoint = <GenericApiEndpoint>req.body;
...但JavaScript也不在意这一点。
有人知道在JavaScript中验证对象形状的简单方法吗?