首頁  >  文章  >  web前端  >  我們如何確保物件在透過 angular.toJson 傳遞時僅包含其介面中定義的屬性?

我們如何確保物件在透過 angular.toJson 傳遞時僅包含其介面中定義的屬性?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-10-31 16:28:02131瀏覽

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?

答案:

<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>
不幸的是,僅根據介面定義在運行時直接從物件中移除無關屬性是不可行的。 TypeScript 中的介面充當設計時構造,它們的屬性在執行時不容易取得。

建議的一個潛在解決方案是將「介面」定義為類,從而提供運行時實作。這使我們能夠利用Lodash 從輸入物件中僅選擇所需的屬性:透過使用此方法,我們可以有效地提取指定的屬性,建立一個遵循介面的物件合約並準備好透過angular.toJson 進行序列化。

以上是我們如何確保物件在透過 angular.toJson 傳遞時僅包含其介面中定義的屬性?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn