1. ホーム
  2. typescript

[解決済み] 2つのインターフェイスを統合する

2022-12-03 11:34:32

質問

確認や説明を求める

2 つのインターフェイスがある場合。これら 2 つのインターフェースのマージを作成するための適切な方法は何ですか?

IFoo {
  // some stuff
}


IBar {
  // some stuff
}


IFooBar extends IFoo, IBar {
 // Empty
}

動作はしますが、空のIFooBarでやり方が間違っているような変な感じがします。

私はこれを正しくやっているのでしょうか?

私はまた、これも動作することに気づきました。

type IFooBar = IFoo & IBar;

を使うことに非論理的な嫌悪感を抱いています。 type を使うことに非論理的な嫌悪感があるのですが、それでもこの方がずっとすっきりしています。

どのように解決するのですか?

この記事 は、インターフェースとタイプエイリアスの関係について非常によく説明しています。 この部分 は両者の小さな違いに焦点をあてています。

どちらも

interface IFooBar extends IFoo, IBar {}

type IFooBar = IFoo & IBar;

は一般的な方法で、ほとんどの場合同じように動作します。したがって type は入力する文字数が少ないので、そのような理由で選ばれるかもしれません。

が混在することで発生する不整合は interfacetype は問題ないはずです。これらは目標を達成するために適した機能であるだけです。もし const BarClass = FooClass が仕事をするのであれば class BarClass extends FooClass {} が一貫して使われているからといって、優先されるべきではないでしょう。 class を使うからというだけで、優先されるべきではありません (この例は説明のために使用されていますが、これらのアプローチにはかなりの違いがあります)。

にもかかわらず interfacetype は同じように動作しますが、マージされたインターフェイスの場合には違いがあります(リンク先の記事でも取り上げています)。これはうまくいくでしょう。

interface FooBar extends IFoo, IBar {}
class FooBar { ... }

そして、これはタイプエラーの原因となります。

type FooBar = IFoo & IBar;
class FooBar { ... }