フローの構造的サブタイプは、情報の損失につながる可能性があります。
type O = {x: number, y: number};
type P = {x: number, y: number, z: number}
function f(o: O) {
return o.x * 2, o.y * 2, o;
}
const p: P = {x: 2, y: 3, z: 100};
const r = f(p);
r.z // type error (property not found)
(このコードは目に見える変更を実行するため、ひどいものです。説明のみを目的としています。)
行ポリモーフィズムは、型の安全性を損なうことなくこの情報の損失を回避するための概念であると読みました。
サブタイプ多型で同じことを達成する方法はありますか?
[編集]
より多くの聴衆に向けて、少し怖い用語について簡単に説明します。
- Polymorpishmは、2 つの型が等しいかどうかを判断するための派手な言葉です。つまり、厳密な型システムをより柔軟にします。
- パラメトリック ポリモーフィズム(フロー内のジェネリック) では、型はまったく問題にならないため、2 つの型は常に同等であると述べています。
- サブタイプ ポリモーフィズム(フロー内のサブタイプ) では、2 つのタイプから階層を導き出すことができる場合、つまりサブタイプをそのスーパータイプの下に含めることができる場合、2 つのタイプは同等であると述べられています。
- 行ポリモーフィズムはサブタイプに似ていますが、情報損失の問題を解決します (ただし、技術的には、サブタイプの関係はもうないため、サブタイプの形式ではありません)。
- 有界ポリモーフィズムは、2 つの型が特定の目的 (例えば、等価性、順序、マッピングオーバーなど) でのみ同等であると述べています。