2016-04-26 18 views
25

Tôi hiện đang học React và tôi nghĩ rằng tôi hiểu nó khá tốt. Tuy nhiên, có một điều khiến tôi bận tâm về việc phát triển các ứng dụng React mạnh mẽ - những công cụ mà các nhà phát triển sử dụng để kiểm tra kiểu tĩnh?Phản hồi - sử dụng TypeScript vs Flow vs?

Tôi thực sự thích TypeScript. Tôi nghĩ rằng nó làm giảm sự đau đớn của việc phát triển các ứng dụng JavaScript khá nhiều, nhờ kiểm tra kiểu và các tính năng gọn gàng khác. Visual Studio Code cũng cung cấp một sự hoàn thành mã thực sự tốt đẹp. Và tôi biết rằng tôi có thể làm cho nó hoạt động với React bằng cách sử dụng typings + DenifitelyTyped.

Vấn đề là, không có nhiều hướng dẫn về cách sử dụng React + TypeScript. Cũng không có nhiều bài viết về phát triển bằng cách sử dụng combo này. Mặt khác, nhiều người dường như đang sử dụng Flow, một dự án được hỗ trợ bởi Facebook (và tôi đoán họ cũng sử dụng nó).

Tôi đã quản lý để tìm một số discussion on Reddit với ưu và khuyết điểm về cách sử dụng React + TypeScript/React + Flow. Tuy nhiên, đối với tôi, nó có vẻ khá lỗi thời vì nó đã được khoảng 10 tháng tuổi rồi. Tôi nghĩ rất nhiều đã thay đổi kể từ đó.

Tôi cũng đã tìm thấy hai bài viết về cách sử dụng React + FlowReact + TypeScript. Tác giả nêu rõ một số vấn đề mà anh ta gặp phải khi sử dụng cả hai tùy chọn và kết luận rằng TypeScript là "đặt cược tốt nhất ngay bây giờ" (tháng 11 năm 2015), đặc biệt là vì dự án Flow có nhiều vấn đề và nhận hoạt động của nhà phát triển thấp từ Facebook. Ông cũng đề cập đến nó không chơi tốt với Babel?

Vì vậy, tôi đoán câu hỏi sẽ là: Có an toàn khi sử dụng combo React + TypeScript hay tôi sẽ gặp phải một số khó khăn? Điều gì về dòng chảy? Có một số công cụ tương tự khác mà tôi nên kiểm tra không? Bạn sẽ đề xuất phương pháp tiếp cận nào?

Cập nhật tháng 9 năm 2017:

Có hơn một năm kinh nghiệm với việc sử dụng hàng ngày của nguyên cảo, và chơi với dòng chảy trong một thời gian, tôi đã đi đến kết luận sau:

  • TypeScript vẫn còn đau đớn để sử dụng cho đến ngày nay. Vấn đề là thế giới JavaScript chỉ di chuyển nhanh đến nỗi TypeScript tiếp tục tụt lại phía sau. Suy nghĩ về việc sử dụng tính năng ES7 giai đoạn 3 mới lạ mắt này? Không, bạn không thể. Bạn muốn nhận gợi ý loại cho phiên bản mới nhất của một số thư viện? Chờ một tháng, hoặc hai, có thể nhiều hơn ...
  • Luồng đã đi một chặng đường dài, nó đã được cải thiện rất nhiều, nó có thể bắt được một số thứ mà TS không thể. Hay nhất của tất cả, nó cuối cùng hoạt động trên Windows. Ngoài ra, có plugin tuyệt vời cho VS Code (không biết tại sao nó chỉ có 3/5 rating). Và nó hoạt động 100% với React Native, TypeScript thậm chí còn chưa đến 50%.
  • Hầu hết thời gian, bạn không cần loại nào cả. Tất cả các gõ bổ sung là hiếm khi giá trị nó. JS là ngôn ngữ được nhập động, vượt qua nó :)

TL; DR: Nếu bạn định sử dụng bất kỳ trình kiểm tra loại nào, tôi khuyên bạn nên sử dụng Luồng.

+0

Bạn cũng có thể chỉ cần sử dụng javascript đơn giản và React cung cấp cho bạn các kiểu chữ để bạn có thể đảm bảo đạo cụ là đúng loại và được chuyển nếu cần. – erichardson30

+0

Vâng, tôi biết về propTypes. Tuy nhiên, điều đó giải quyết vấn đề chỉ một phần - trong lớp xem (nếu tôi không nhầm?). Điều gì về mã trong các cửa hàng và hành động? Tôi cũng muốn có kiểu gõ tĩnh. –

+1

http://blog.wolksoftware.com/working-with-react-and-typescript có vẻ như nó có một số tài liệu tốt về cách sử dụng typescript với phản ứng và các phần mở rộng khác nhau mà bạn cần sử dụng – erichardson30

Trả lời

14

Tôi sẽ bắt đầu câu trả lời này nói rằng tôi chưa bao giờ sử dụng Flow, vì vậy tôi không thể nói nhiều về nó. Nhưng, chúng tôi đang sử dụng React và TypeScript tại nơi làm việc và nó hoạt động rất tốt.

Chúng tôi có tất cả những lợi ích mà tôi tưởng tượng bạn đã biết, như tái cấu trúc, nhập an toàn, tự động hoàn thành, v.v.

Chắc chắn, đối với những gì tôi đã thấy, cú pháp Luồng sạch hơn TypeScript, nhưng bạn có thể thêm các loại của mình bằng cách sử dụng TypeScript tăng dần. Tôi nghĩ, đây là một vấn đề của hương vị. Một số người thích có mã được gõ một cách rõ ràng, những người khác thích gõ ít hơn và có suy luận kiểu mạnh hơn.

Về công nghệ, tôi muốn nói TypeScript là một cược an toàn, Microsoft đang đẩy ngôn ngữ (there will be a version 2 soon), Góc sử dụng nó là tốt và có rất nhiều nhà phát triển góc. Ngay cả ở đây trên SO, thẻ TypeScript có nhiều hơn 4K người theo dõi và hiếm khi có câu hỏi chưa được trả lời.

Vấn đề lớn với TypeScript, đôi khi chúng tôi quyết định sử dụng thành phần hoặc thư viện không có định nghĩa kiểu, vì vậy chúng tôi phải tự tạo chúng. Nhưng tôi đoán, đó là một cách để đóng góp lại cho cộng đồng.

4

Tôi chỉ tự hỏi mình những câu hỏi tương tự (mặc dù không phải với Phản ứng) và tìm thấy các bài viết sau hữu ích trong việc đánh giá hai:

phương pháp thực hiện bởi các nhà thiết kế dòng chảy cảm thấy thêm chức năng với kiểu suy luận tốt hơn và ab phương pháp tiếp cận etter cho nulls. Tuy nhiên, TypeScript có hỗ trợ cộng đồng tốt hơn đặc biệt là đối với việc kéo các loại cho thư viện của bên thứ ba thông qua http://definitelytyped.org/, điều quan trọng là có các loại luồng thông qua tất cả mã của bạn để đảm bảo an toàn tối đa. TypeScript được tạo bởi Microsoft có lịch sử phong phú trong việc viết trình biên dịch và phát triển công nghệ theo hướng thuận lợi - đáng chú ý ở đây là C# và thực tế là chúng đã thêm các loại không null (2016-07-11): https://blogs.msdn.microsoft.com/typescript/2016/07/11/announcing-typescript-2-0-beta/

TypeScript có vẻ như đặt cược an toàn hơn ngày hôm nay.

Và đối với những cố gắng nguyên cảo ra trong một codebase hiện tôi thấy các cài đặt sau trong tập tin tsconfig.json tôi thực sự hữu ích trong việc cho phép typescript để cùng tồn tại độc đáo với JavaScript (cho phép chuyển một tập tin tại một thời điểm):

{ 
    "compilerOptions": { 
     "allowJs": true, 
     "isolatedModules": true, 
     ... 
    } 
} 
2

Trong Phản ứng phát triển của tôi, tôi có khá phức tạp Babel/Webpack/Flow/Mocha toolchain thành lập và chưa bao giờ có bất kỳ vấn đề với dòng chảy. Mất một số nỗ lực để thiết lập tất cả mọi thứ (Webpack có thể được khó khăn lúc đầu), nhưng sau đó, nó chỉ hoạt động. Dòng chảy chắc chắn là con đường để đi vì nó là một công nghệ hẹp hơn và tập trung hơn và như vậy nhiều khả năng để chơi tốt với các công cụ khác. Ngược lại, TypeScript cố gắng nhiều hơn chỉ là một loại công cụ kiểm tra kiểu suy luận/tĩnh và do đó nó mang thêm hành lý và giả định. Vì vậy, React là một công cụ chuyên biệt thực hiện một điều tốt trong khi TypeScript là một lớp ngôn ngữ có hiệu quả trên đầu trang của JavaScript. Để đảm bảo rằng Microsoft có thể truy cập vào trang chủ của nó, các tệp TypeScript cũng có thể có một phần mở rộng khác (.ts thay vì .js) vì bạn hiện đang sử dụng một ngôn ngữ khác, phải không?

TypeScript sử dụng tạo mã để kích hoạt JavaScript trong khi trong Flow các chú thích đơn giản bị tước bỏ, không có tạo mã như vậy. Trong quá khứ, người Microsoft quảng bá TypeScript được sử dụng để tạo ra một tuyên bố về hiệu ứng tạo mã là "tệp cục bộ" (tôi không nhớ thuật ngữ chính xác được sử dụng).Điều này được cho là cung cấp một sự yên tâm nhẹ nhàng rằng trình biên dịch TypeScript không làm bất cứ điều gì quá huyền diệu. Ở mức nào tôi không thể tìm thấy tuyên bố đó nổi bật hiển thị nữa. Với Flow bạn không cần những đảm bảo như vậy khi bạn viết bằng JavaScript đơn giản (hoặc bất kỳ phiên bản ECMA nào bạn đã định cấu hình Babel cho) và các chú thích, như tôi đã nói, chỉ đơn giản là bị loại bỏ. Chưa kể rằng TypeScript đến từ một công ty chuyên về thực hành kỹ thuật phi đạo đức và có vấn đề (Tôi không loại trừ rằng TypeScript cuối cùng có thể trở thành mẹ của tất cả các hợp kim Embrace-Extend-Extinguish).

Ngoài ra, hệ thống loại luồng là nhiều hơn mạnh hơn lần trước tôi đã đánh giá TypeScript (khoảng năm 2015) và dễ dàng áp dụng nó nhiều hơn hoặc thậm chí không thường xuyên trong các nguồn. Để tích hợp các thư viện của bên thứ ba, tôi đang sử dụng flowtyped và rất hiếm khi tôi cần bổ sung cho những thư viện có định nghĩa của riêng mình.

Cuối cùng, thực tế là Angular sử dụng TypeScript có nghĩa là hoàn toàn không có gì là Góc không thực sự có liên quan cho các dự án mới. React đã thắng tay, thời gian để tiếp tục.

+2

"một công ty chuyên về thực hành kỹ thuật phi đạo đức và có vấn đề" - và Facebook thì không? : P – swalladge

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