首页 >web前端 >js教程 >我们如何确保对象在通过 angular.toJson 传递时仅包含其接口中定义的属性?

我们如何确保对象在通过 angular.toJson 传递时仅包含其接口中定义的属性?

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-10-31 16:28:02218浏览

How can we ensure that an object only contains properties defined in its interface when passing it through angular.toJson?

确保对象符合接口:删除无关属性

TypeScript 接口定义类或对象的契约规范。然而,在实现过程中,可能会添加超出接口定义的附加属性,从而导致不一致。解决这个问题变得至关重要,特别是当通过 angular.toJson 传递简化的对象进行 RESTful 通信时。

考虑一个带有单个属性测试的接口 MyInterface:

<code class="typescript">interface MyInterface {
  test: string;
}</code>

及其附加的实现property newTest:

<code class="typescript">class MyTest implements MyInterface {
  test: string;
  newTest: string;
}</code>

问题:

当从像 MyTest 这样的对象分配时,我们如何确保简化的对象仅包含 MyInterface 中声明的属性,排除 newTest?

答案:

不幸的是,仅根据接口定义在运行时直接从对象中去除无关属性是不可行的。 TypeScript 中的接口充当设计时构造,它们的属性在执行时不容易获得。

建议的一个潜在解决方案是将“接口”定义为类,从而提供运行时实现。这使我们能够利用 Lodash 从输入对象中仅选择所需的属性:

<code class="typescript">class MyInterface {
  test: string = undefined;
}</code>
<code class="typescript">import _ from 'lodash';

const before = { test: "hello", newTest: "world"};
let reduced = new MyInterface();
_.assign(reduced , _.pick(before, _.keys(reduced)));
console.log('reduced', reduced)//contains only 'test' property</code>

通过使用此方法,我们可以有效地提取指定的属性,创建一个遵循接口的对象合约并准备好通过 angular.toJson 进行序列化。

以上是我们如何确保对象在通过 angular.toJson 传递时仅包含其接口中定义的属性?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn