Memastikan Pematuhan Objek dengan Antara Muka: Mengalih Keluar Sifat Luaran
Antara muka TypeScript mentakrifkan spesifikasi kontrak untuk kelas atau objek. Walau bagaimanapun, semasa pelaksanaan, sifat tambahan boleh ditambah melebihi yang ditakrifkan oleh antara muka, yang membawa kepada ketidakkonsistenan. Menangani isu ini menjadi penting, terutamanya apabila menghantar objek yang dikurangkan melalui angular.toJson untuk komunikasi RESTful.
Pertimbangkan antara muka MyInterface dengan ujian sifat tunggal:
<code class="typescript">interface MyInterface { test: string; }</code>
Dan pelaksanaannya dengan tambahan property newTest:
<code class="typescript">class MyTest implements MyInterface { test: string; newTest: string; }</code>
Soalan:
Bagaimana kita boleh memastikan objek yang dikurangkan, apabila diberikan daripada objek seperti MyTest, hanya mengandungi sifat yang diisytiharkan dalam MyInterface , tidak termasuk newTest?
Jawapan:
Malangnya, tidak mungkin untuk menanggalkan secara langsung sifat luar daripada objek pada masa jalan hanya berdasarkan definisi antara muka. Antara muka dalam TypeScript berfungsi sebagai binaan masa reka bentuk dan sifatnya tidak tersedia semasa pelaksanaan.
Satu penyelesaian berpotensi yang dicadangkan ialah mentakrifkan "antara muka" sebagai kelas, dengan itu menyediakan pelaksanaan masa jalan. Ini membolehkan kami memanfaatkan Lodash untuk memilih hanya sifat yang dikehendaki daripada objek input:
<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>
Dengan menggunakan kaedah ini, kami boleh mengekstrak sifat yang ditentukan dengan berkesan, mencipta objek yang mematuhi antara muka kontrak dan sedia untuk bersiri melalui angular.toJson.
Atas ialah kandungan terperinci Bagaimanakah kita boleh memastikan bahawa objek hanya mengandungi sifat yang ditakrifkan dalam antara mukanya apabila menghantarnya melalui angular.toJson?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!