ウェブサイト検索

他のインターフェースの合併としてTypeScriptのインターフェースを作成する


私は一つの基本インターフェースを拡張するインターフェースのリストを持っています。

私はこれらのインターフェースのいずれかを受け入れることができる関数もいくつか持っています。

私はその種類のパラメータを説明する新しいインターフェースを作成したいです。

だから、私はこんなものを持っています:

interface BasicInterface {...};

interface A extends BasicInterface {...};
interface B extends BasicInterface {...};

そして、私はそのようなものがほしいです

interface C = A | B;

自分の機能で何ができるか分かっています

function X(param1: A | B) {};

しかし、複数の関数があるので、それらすべてに対して1つのインターフェースだけを持ちたいです。

回答 #1

それで、TypeScriptのドキュメントを少し調べた後、私が探していたもの、すなわち型エイリアスを見つけました。

私は type C=A | B; のように新しい型を宣言することができます

それから関数内で型ガードを使って正しいものにアクセスします:

function isA(param: C): param is A {
    return param.type === A;
}

function X(param1: C) {
  if (isA(param1)) //things related to A
  else //things related to B
};

回答 #2

残念ながら、interface を使用して直接ユニオン型を定義することはできません。

それは、例えば型を使うなど、間接的にしか行うことはできません。

interface A {
    x: 'x';
}
interface B {
    y: 'y';
}

type C = A | B; // Union of interfaces using a type

このページでの詳細情報と例:TypeScript ブック

関連記事