2017-03-23 33 views
5

Nie mogę uzyskać dokładnych typów przepływu do pracy z rozkładaniem obiektów.Obiekt Rozprzestrzenianie się z typami przepływu dokładnego

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

Generuje błąd obiektowy. Niedokładne rodzaj jest niezgodna z dokładnym typu

does't produkować ten błąd, ale modyfikuje p1:

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

Korzystanie Object.assign z pustym obiektem produkuje taką samą obiektu dosłownego błąd:

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

Jeśli użyję type Point = {x: number, y: number};, to obiekt rozprzestrzeni się działa, ale najlepiej chciałbym użyć dokładnego typu.

Odpowiedz

6

Tak, to znany błąd. Obecnie pracuję nad ulepszeniem naszej analizy rozprzestrzeniania obiektów w celu naprawienia tego i innych problemów. Podstawową przyczyną jest to, że wyrażenia rozprzestrzeniania obiektów powodują "nieuszczelnione", które są niezgodne z dokładnymi typami obiektów. Ulepszona analiza utworzy zapieczone obiekty, jeśli to możliwe.

+1

Dzięki za odpowiedź, po prostu okazało się, że problem tutaj https://github.com/facebook/flow/issues/2405 Staram się z 'typ Exact = T & $ Shape ;' obejście teraz. – Andy