ホームページ > 記事 > ウェブフロントエンド > angular.toJson を介してオブジェクトを渡すときに、そのインターフェイスで定義されたプロパティのみがオブジェクトに含まれるようにするにはどうすればよいでしょうか?
オブジェクトのインターフェイスへの準拠の確保: 無関係なプロパティの削除
TypeScript インターフェイスは、クラスまたはオブジェクトのコントラクト仕様を定義します。ただし、実装中に、インターフェイスで定義されているプロパティを超えて追加のプロパティが追加される可能性があり、不整合が発生する可能性があります。この問題に対処することは、特に RESTful 通信のために angular.toJson を介して縮小オブジェクトを渡す場合に重要になります。
単一のプロパティ テストを持つインターフェイス 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 のインターフェイスはデザイン時の構成として機能し、そのプロパティは実行時にすぐには利用できません。
提案される可能性のある解決策の 1 つは、「インターフェイス」をクラスとして定義し、それによって実行時の実装を提供することです。これにより、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 中国語 Web サイトの他の関連記事を参照してください。