TypeScript の JavaScript オブジェクトにインターフェイス プロパティのみが含まれていることを確認する方法

Mary-Kate Olsen
リリース: 2024-10-31 04:33:30
オリジナル
431 人が閲覧しました

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

JavaScript オブジェクトをインターフェイス プロパティに還元する

TypeScript インターフェイスはオブジェクトのコントラクトを定義し、型の安全性を確保します。ただし、オブジェクトにインターフェイスで指定されたプロパティのみが含まれていることを確認する必要がある場合があります。

問題:

次の TypeScript コードを考えてみましょう:

<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>
ログイン後にコピー

これはなぜ問題があるのですか?

REST 呼び出しを行う前に Angular の toJson メソッドを使用すると、追加のプロパティ (newTest) が JSON に含まれるため、次の問題が発生する可能性があります。

解決策 1: 回避策

James Moey が洗練された回避策を提供しています。代わりにインターフェイスをクラスとして宣言し、Lodash を使用してインターフェイスのプロパティのみを選択します。オブジェクトから:

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

import _ from 'lodash';
let reduced = new MyInterface();
_.assign(reduced, _.pick(before, _.keys(reduced)));</code>
ログイン後にコピー

このソリューションにより、型安全性を維持しながら、結果として得られるオブジェクトがインターフェイス プロパティのみを持つようにすることができます。

解決策 2: インターフェイス ヘルパー関数

もう 1 つのアプローチは、インターフェイスに対してオブジェクトを検証するヘルパー関数を作成することです。例:

<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>
ログイン後にコピー

このアプローチでは、ループ イントロスペクションを使用してインターフェイスに対してオブジェクトを検証し、Lodash の pick 関数のオーバーヘッドを回避します。

以上がTypeScript の JavaScript オブジェクトにインターフェイス プロパティのみが含まれていることを確認する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!