本文へスキップ

構造的部分型とは?

こうぞうてきぶぶんがた

構造的部分型とは、型の名前ではなく構造(持っているメンバーメソッド)の一致を基準に型の互換性を判定する型システムの方式です。

構造的部分型(structural subtyping)とは、プログラミング言語の型システムにおいて、型の互換性を型の名前や宣言ではなく、実際に持つプロパティやメソッドの構造によって判定する方式です。ダック・タイピング(「アヒルのように歩き、アヒルのように鳴くなら、それはアヒルだ」)の静的型付けバージョンとも言えます。

対義語は公称型(nominal subtyping)であり、JavaやC#のように型名や継承関係によって型の互換性を決定します。公称型では、たとえ同じプロパティを持っていても、明示的に継承・実装を宣言しなければ別の型として扱われます。

構造的部分型を採用する代表的な言語・型システムには次のものがあります。

  • TypeScript:JavaScriptに型を加えた言語で構造的部分型を採用。同じ形のオブジェクトはそのまま互換とみなされます。
  • Go:インターフェースを構造的に実装しているかどうかで判定(明示的なimplementsキーワードなし)。
  • OCaml(一部):オブジェクト型が構造的に比較されます。

構造的部分型のメリットは柔軟性が高く、外部ライブラリの型を継承せずに再利用できる点です。一方で、意図せず型互換と判定されてしまうバグが生まれやすいという側面もあります。API設計やインターフェース設計の自由度が高く、JavaScriptエコシステムと相性が良いため、TypeScriptにおいて広く活用されています。

使い方・例文

TypeScriptでは、名前プロパティと年齢プロパティを持つオブジェクトは、それらが定義されたインターフェースを明示的に実装せずとも、同じ構造を持つ型として代入が許可される。

この用語をシェア

𝕏 でポスト LINE

最終更新:

関連用語