2017-03-23 12 views
5

Tôi dường như không thể có được các loại chính xác trong luồng để làm việc với sự lây lan của đối tượng.Lây lan đối tượng với các kiểu dòng chính xác

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

Tạo lỗi đối tượng theo nghĩa đen. loại không chính xác là không phù hợp với loại chính xác

này does't tạo ra một lỗi, nhưng sẽ thay đổi p1:

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

Sử dụng Object.assign với một đối tượng rỗng cũng sản xuất cùng đối tượng đen lỗi:

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

Nếu tôi sử dụng type Point = {x: number, y: number}; thì đối tượng lan truyền hoạt động, nhưng lý tưởng tôi muốn sử dụng loại chính xác.

Trả lời

6

Vâng, đây là lỗi đã biết. Tôi hiện đang làm việc để cải thiện phân tích của chúng tôi về sự lây lan đối tượng để khắc phục vấn đề này và các vấn đề khác. Nguyên nhân cơ bản là biểu thức lây lan của đối tượng dẫn đến "unsealed" không tương thích với các kiểu đối tượng chính xác. Phân tích được cải thiện sẽ tạo ra các vật thể kín khi có thể.

+1

Cảm ơn câu trả lời của bạn, tôi chỉ tìm thấy vấn đề ở đây https://github.com/facebook/flow/issues/2405 Tôi đang thử giải pháp 'hiện tại chính xác = T & $ Shape ;'. – Andy

Các vấn đề liên quan