1. ホーム
  2. typescript

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

2022-02-16 21:14:12

質問

確認または説明を求める

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 { ... }