はじめに v0.42.0 からリリースされている Object type spread 機能ですが、ドキュメントが 公式サイト にはまだ無いようです。 そこで実際挙動を調査したところ、個人的には中々難しい仕様だったので、まとめてみました。 検証に使った flow-bin のバージョンは v0.45.0 です。 基本的な挙動 サンプルとして、以下のような型を定義してみます。 type T1 = { x: number, y: number, z: number, }; type T2 = { y: number, z: string, a: number, ...T1, b: number, }; T2 には複数のプロパティが定義されていますが、それぞれこのような意図で定義しています。 x = 拡張する側にあり、拡張される側にはない y = 拡張する側にあり、拡張される側に同じ型がある z