Rumah  >  Artikel  >  hujung hadapan web  >  Bagaimana untuk Memastikan Objek JavaScript Hanya Mengandungi Sifat Antara Muka dalam TypeScript?

Bagaimana untuk Memastikan Objek JavaScript Hanya Mengandungi Sifat Antara Muka dalam TypeScript?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-10-31 04:33:30431semak imbas

How to Ensure JavaScript Objects Contain Only Interface Properties in TypeScript?

Mengurangkan Objek JavaScript kepada Sifat Antara Muka

Antaramuka TypeScript mentakrifkan kontrak untuk objek dan memastikan keselamatan jenis. Walau bagaimanapun, kadangkala anda mungkin perlu memastikan bahawa objek mengandungi hanya sifat yang ditentukan oleh antara muka.

Masalah:

Pertimbangkan kod TypeScript berikut:

<code class="ts">interface MyInterface {
  test: string;
}

class MyTest implements MyInterface {
  test: string;
  newTest: string;
}

const test: MyTest = { test: "hello", newTest: "world" };
const reduced: MyInterface = test; // reduced still contains "newTest"</code>

Mengapa ini bermasalah?

Apabila menggunakan kaedah toJson Angular sebelum membuat panggilan REST, sifat tambahan (newTest) disertakan dalam JSON, yang boleh menyebabkan masalah dengan perkhidmatan penerima.

Penyelesaian 1: Penyelesaian

James Moey menyediakan penyelesaian yang elegan: sebaliknya mengisytiharkan antara muka sebagai kelas dan gunakan Lodash untuk memilih sifat antara muka sahaja daripada objek:

<code class="ts">class MyInterface {
  test: string = undefined;
}

import _ from 'lodash';
let reduced = new MyInterface();
_.assign(reduced, _.pick(before, _.keys(reduced)));</code>

Penyelesaian ini membolehkan anda mengekalkan keselamatan jenis sambil memastikan objek yang terhasil hanya mempunyai sifat antara muka.

Penyelesaian 2: Fungsi Pembantu Antara Muka

Pendekatan lain ialah mencipta fungsi pembantu yang mengesahkan objek terhadap antara muka. Contohnya:

<code class="ts">interface MyInterface {
  test: string;
}

function reduceObject(obj: any, targetInterface: any): MyInterface {
  const reduced = {};
  Object.keys(targetInterface).forEach((key) => {
    if (obj[key] !== undefined) {
      reduced[key] = obj[key];
    }
  });
  return reduced;
}

const test: MyTest = { test: "hello", newTest: "world" };
const reduced: MyInterface = reduceObject(test, MyInterface);</code>

Pendekatan ini menggunakan introspeksi gelung untuk mengesahkan objek terhadap antara muka dan mengelakkan overhed fungsi pilih Lodash.

Atas ialah kandungan terperinci Bagaimana untuk Memastikan Objek JavaScript Hanya Mengandungi Sifat Antara Muka dalam TypeScript?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn