确保对象符合接口:删除无关属性
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中文网其他相关文章!