2017-02-23 10 views
12

Làm cách nào để bạn đánh máy hình dạng của cấu trúc dữ liệu Không thể thay đổi được tạo ra từ fromJS bằng Flow? blobs JS cũ Plain có thể được gõ rất chính xác hơn bằng một đối tượng ký hiệu đen:Flow: Đánh máy một hình dạng phức tạp Không thể thay đổi bằng cách sử dụng fromJS()?

type ObjectShape = { 
    a: number, 
    b: string, 
    c: { 
    d: number, 
    }, 
    e: Array<number> 
}; 

const obj: ObjectShape = { // hyper-accurate 
    a: 1, 
    b: '2', 
    c: { 
    d: 3, 
    }, 
    e: [4] 
} 

Tuy nhiên, ở phía bên Immutable.js, hình như vẫn có hai biến chứng chính:

  1. Dường như bất di bất dịch phương pháp fromJS .js của trả any (https://github.com/facebook/immutable-js/blob/master/type-definitions/immutable.js.flow#L764), vì vậy sau đây không bị bắt lại khi một lỗi trong luồng:

    const map: boolean = fromJS(obj) // this is totally not true, but Flow can't tell 
    
  2. Có vẻ như các hình dạng bản đồ không thể được mô tả bằng cách sử dụng ký pháp giống như đối tượng trên mỗi How to describe Immutable.js Map shape with Flow (hoặc thông tin này có lỗi thời không?).

Tôi thực sự bối rối về cách hiểu Flow để hiểu Immutable.js, bản đồ nói riêng. Từ những gì tôi có thể nói, Flow mất rất nhiều thông tin về codebase khi dữ liệu đang sống trong các cấu trúc Immutable.js thay vì các nguyên thủy JS thuần túy.

+0

điều gì về https://github.com/flowtype/flow-typed, bạn chỉ có thể tải loại bản đồ defintion –

+0

Không có định nghĩa cho immutabe.js trên luồng được nhập, chúng được bao gồm trực tiếp với immutable.js gói từ npm. Tuy nhiên, định nghĩa Bản đồ đi kèm với immutable.js ngay bây giờ không xuất hiện để cho phép bạn xác định hình dạng: https://github.com/facebook/immutable-js/blob/master/type-definitions/immutable.js.flow# L489 –

Trả lời

0

Bạn về mặt lý thuyết sẽ phải sử dụng một bản ghi() mà mã hóa hình dạng mong muốn và sau đó thêm typechecking ...

Ngoại trừ việc tĩnh gõ thành viên thực tế cấu trúc bất biến-js này sẽ buồn bã không có thể, vì certainfeatures thiếu lưu lượng.

Hiện tại có một số yêu cầu kéo (first, second) mở để thêm các tính năng cần thiết cho trình đánh máy, nhưng chúng khá tham gia và quá trình xem xét và tích hợp chúng dường như đang diễn ra trên Facebook.

Tôi nghi ngờ rằng ngay sau khi được hợp nhất, các định nghĩa dòng được nhập mã hóa độ nóng mới sẽ tăng gần như ngay lập tức, ngay cả khi dự án bất biến-js không tích hợp chúng nhanh.

Lưu ý: nếu bạn muốn cung cấp phản hồi, vui lòng không để lại "+1" hoặc "khi nào nhận xét được thực hiện"; chúng không được chấp nhận cho kho lưu trữ đó. Sử dụng tính năng phản ứng/bỏ phiếu thay thế.

+1

Tôi thấy rằng PR hiện đã bị đóng. Bất kỳ ví dụ về làm thế nào để làm điều này, nếu nó có thể bây giờ? –

+1

Thay vì các PR đó, giải pháp mà các luồng lưu lượng đến là thêm một hàm * mới *, $ ElementType, có các tính năng cần thiết. Xem ví dụ https://flow.org/try/#0C4TwDgpgBA0hJQLxQOQGt4oNwChSSgBUkoBvKDEALigDsBXAWwCMIAnKAX1wBMIBjADYBDNtABuoqGDYB7MDQAkAUUERGEWsELgIAHkIAaOCAB8uIA – azernik

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