本稿では、異なる2つの型システム「公称型」と「構造的部分型」の差異について説明します。 型の互換性とは? まず型の互換性とは何でしょうか? TypeScriptでは、ある型に別の型を代入できるかどうかが「互換性」の判断基準になります。例えば、1はnumberに代入できるので、1はnumberに互換しています。一方、trueはnumberに代入できないので、trueはnumberとは互換していないことになります。 TypeScriptは、互換性の有無の判断基準(つまり、代入できるかどうかの基準)が、JavaやPHPなどとは異なっています。どのように異なるのか、それぞれ見ていきましょう。 公称型 - 継承関係に着目するJava JavaやPHPは、公称型(nominal typing)という型システムを採用しています。公称型では、型の互換性は、オブジェクト同士の継承関係(is-a関係)に着目し