Mengurangkan Objek JavaScript kepada Sifat Antara Muka
Apabila bekerja dengan TypeScript, kami sering menghadapi keperluan untuk mengurangkan objek JavaScript untuk hanya mengandungi sifat yang diisytiharkan dalam antara muka. Ini amat berguna apabila menghantar data ke perkhidmatan REST yang menjangkakan skema tertentu.
Pertimbangkan antara muka berikut:
<code class="typescript">interface MyInterface { test: string; }</code>
Dan pelaksanaan yang termasuk sifat tambahan:
<code class="typescript">class MyTest implements MyInterface { test: string; newTest: string; }</code>
Isu timbul apabila kami cuba menggunakan kaedah toJson Angular untuk mensirikan contoh MyTest untuk dihantar ke perkhidmatan REST. Kaedah toJson termasuk sifat newTest, yang bukan sebahagian daripada antara muka. Ini boleh membawa kepada ralat pada bahagian pelayan.
Untuk menyelesaikan isu ini, kita perlu mencari jalan untuk mengurangkan contoh MyTest supaya hanya mengandungi sifat yang diisytiharkan dalam antara muka MyInterface. Walau bagaimanapun, ini tidak boleh dilakukan secara langsung kerana antara muka dalam TypeScript pada asasnya adalah pemegang tempat yang tidak mempunyai perwakilan masa jalan.
Sebaliknya, kami boleh menggunakan penyelesaian. Satu pendekatan ialah mentakrifkan antara muka sebagai kelas dengan pemula sifat:
<code class="typescript">class MyInterface { test: string = undefined; }</code>
Menggunakan kelas ini sebagai antara muka, kita kemudian boleh menggunakan perpustakaan seperti Lodash untuk memilih hanya sifat yang sepadan dengan antara muka:
<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); // { test: "hello" }</code>
Penyelesaian ini secara berkesan mengurangkan contoh MyTest untuk hanya memasukkan sifat yang diisytiharkan dalam antara muka MyInterface, memberikan penyelesaian yang mudah dan pragmatik kepada cabaran.
Atas ialah kandungan terperinci Bagaimana untuk Mengurangkan Objek JavaScript kepada Hanya Sifat Antara Muka dalam TypeScript?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!