2017-03-23 11 views
5

オブジェクトスプレッドで動作するフローで正確なタイプを取得できないようです。正確なフロータイプを持つオブジェクトスプレッド

type Point = {| x: number, y: number |}; 
const p1: Point = { x: 10, y: 10 }; 
const p2: Point = { ...p1, y: 5 }; 

エラーオブジェクトリテラルを生成します。不正確なタイプは正確なタイプと互換性がない

これはエラーを生成does'tが、変更P1:空のオブジェクトも同じオブジェクトリテラルエラーを生成してObject.assign使用

const p3: Point = Object.assign(p1, {y: 5}); 

const p4: Point = Object.assign({}, p1, {y: 5}); 

type Point = {x: number, y: number};を使用するとオブジェクトスプレッドが機能しますが、理想的には正確なタイプを使用したいと思います。

答えて

6

これは既知のバグです。私は現在、この問題やその他の問題を解決するためのオブジェクトスプレッドの分析を改善するために取り組んでいます。根本的な原因は、オブジェクト展開式が正確なオブジェクト型と互換性のない "非密封"となることです。改善された分析は、可能であれば封印されたオブジェクトを作成する。

+1

答えていただきありがとうございます。ここで問題が見つかりました。https://github.com/facebook/flow/issues/2405私は 'type exact = T&$ Shape ;回避しようとしています。 – Andy

関連する問題