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

Mary-Kate Olsen
Lepaskan: 2024-10-31 04:33:30
asal
429 orang telah melayarinya

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!