ホームページ  >  記事  >  ウェブフロントエンド  >  TypeScript のインターフェイスで実行時の型チェックを実行するにはどうすればよいですか?

TypeScript のインターフェイスで実行時の型チェックを実行するにはどうすればよいですか?

DDD
DDDオリジナル
2024-11-24 18:17:11281ブラウズ

How to Perform Runtime Type Checks on Interfaces in TypeScript?

TypeScript のインターフェイス型チェック: 実行時検証への旅

TypeScript は、コードの正確性を保証する型チェック機能を提供します。ただし、インターフェイスを扱う場合、実行時に変数がインターフェイスを実装しているかどうかを検証するのは困難な場合があります。

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

interface A {
    member: string;
}

var a: any = { member: "foobar" };

if (a instanceof A) alert(a.member);

このコードはコンパイル中にエラーを発生させ、次のことを示します。 「名前 A は現在のスコープに存在しません。」インターフェイス宣言にもかかわらず、JavaScript にはインターフェイス表現がないため、TypeScript では実行時に問題が発生します。

TypeScript カスタム タイプ ガード

この制限を克服するために、TypeScript ではカスタム タイプ ガードが導入されています。タイプ ガードを使用すると、instanceof に依存せずにインターフェイスをチェックできます。以下に例を示します。

interface A {
    member: string;
}

function instanceOfA(object: any): object is A {
    return 'member' in object;
}

var a: any = { member: "foobar" };

if (instanceOfA(a)) {
    alert(a.member);
}

このコードは、instanceOfA 型ガードを使用して A インターフェイスが実装されているかどうかを正常にチェックします。

複雑なインターフェイス実装の処理

インターフェイスに複数のメンバーがあるシナリオでは、弁別アプローチが役立つ場合があります。簡単な例を次に示します。

interface A {
    discriminator: 'I-AM-A';
    member: string;
}

function instanceOfA(object: any): object is A {
    return object.discriminator === 'I-AM-A';
}

var a: any = { discriminator: 'I-AM-A', member: "foobar" };

if (instanceOfA(a)) {
    alert(a.member);
}

この場合、discriminator プロパティは、A インターフェイスを実装するオブジェクトの一意の識別子として機能します。

結論

TypeScript のカスタム タイプ ガードとディスクリミネーター アプローチにより、開発者はインターフェイス上で実行時の型チェックを実行できます。コードの正確性を確保し、潜在的なエラーを防ぎます。

以上がTypeScript のインターフェイスで実行時の型チェックを実行するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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