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

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

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-10-31 04:33:30432ブラウズ

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。