javascript - JS 如何检查对象是否具有接口(interface)中未包含的属性?

标签 javascript typescript interface

我有这个界面

export interface IUser {
  name?: string;
  email?: string;
  state?: number;
}

我收到了这个对象

const payload = {
  name: 'name1',
  surename: 'surename1'
};

我需要的是拒绝这个有效负载,如果它包含一些未包含在 IUser 接口(interface)中的属性,如本例中的surename

最佳答案

创建一个允许属性的数组,然后检查.some对象属性之一是否不在数组中:

const permittedProperties = ['name', 'email', 'state'];

// ...

if (Object.keys(payload).some(key => !permittedProperties.includes(key))) {
  throw new Error('Invalid property found');
}

如果您还想验证该对象的内部原型(prototype)上的属性,则还必须递归地迭代每个原型(prototype)对象。

如果您想验证不存在禁止的不可枚举属性,请使用 Object.getOwnPropertyNames (它检索所有自己的属性)而不是 Object.keys (它仅检索自己的可枚举属性)。

关于javascript - JS 如何检查对象是否具有接口(interface)中未包含的属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58949968/

相关文章:

javascript - 解析错误 : "Can' t modify username in the before save trigger"and "Validation Failed"

javascript - 如何隐藏条形图轴的线条?

javascript - 为什么 Typescript 接口(interface)不在 Javascript 中呈现

typescript - 在 TypeScript 3.3 中工作的代码在 3.5+ 中被破坏,为什么?

php - 可迭代对象的正确 phpdoc 注释?

java - 扩展一个类(实现接口(interface))并实现相同的接口(interface)不需要在类中定义方法吗?

javascript - JavaScript 原生的排序功能是如何实现的?

javascript - 如何使用 javascript/jQuery 和 phonegap 解析远程 xml 文件?

typescript - 从未定义的值中过滤数组

c++ - C++ 中集合/容器的接口(interface)/父类(super class)