Tôi có nên sử dụng bản thảo? hoặc tôi chỉ có thể sử dụng ES6? [đóng cửa]


286

Công việc hàng ngày của tôi là nhà phát triển khách hàng sử dụng AngularJS. Chúng tôi đang đánh giá nếu chúng tôi muốn đi với TypeScript. Tôi đã thực hiện một số nghiên cứu về bản thảo và hầu hết mọi gói JavaScript tôi cần phải có các tệp định nghĩa. Tôi thấy điều đó không thuận tiện lắm, đặc biệt nếu tôi muốn thử một cái gì đó mới và họ không có định nghĩa cho nó. Nó thực sự bực bội. (Ngay cả định nghĩa jQuery hiện tại cũng cung cấp cho tôi một số vấn đề nếu tôi muốn sử dụng bản đánh máy 1.5 beta). Tôi bắt đầu nhìn vào ES6 và nó trông tương tự như TypeScript. Tôi có nên sử dụng ES6 thay thế? Ngoài ra, tôi nghe nói angular 2 sẽ hỗ trợ đầy đủ cho TypeScript, đó có phải là một lý do tôi nên ở lại với nó không?


11
Bạn không cần một tệp định nghĩa mọi lúc cho một cái gì đó mới. Nếu bạn muốn sử dụng một thư viện không có loại bạn có thể viết declare var MyNewLibraryName: any;thì hãy sử dụng nó như bạn muốn mà không cần trình biên dịch phàn nàn.
David Sherret

2
Với số phiếu để đóng câu hỏi này, tôi sẽ đề nghị hỏi thêm về những ưu / nhược điểm liên quan đến từng phương pháp thay vì hỏi cái nào là tốt nhất, theo cách này bạn đang hỏi thông tin chứ không phải cho ý kiến.
Brocco

Bản thảo cập nhật tính năng phiên bản javascript mới trước tất cả các trình duyệt chính, tùy chọn của tôi là sử dụng bản in và biên dịch thành phiên bản javascript dựa trên trình duyệt mục tiêu của bạn. (tất nhiên là dễ dàng chuyển mã javascript từ phiên bản này sang phiên bản khác)
bhv

Nếu bạn không bận tâm về việc có thể điều chỉnh mã của mình một cách chính xác và bạn muốn Immutable.js thực sự khó khăn để làm việc và bạn thích viết bản tóm tắt, và bạn nghĩ DRY được đánh giá cao và bạn thực sự thích lặp lại chính mình, và bạn thích viết định nghĩa loại cho mã của người khác và bạn thích quản lý các loại khi chúng thay đổi bên dưới bạn và bạn thích chuyển đổi giữa hai trình soạn thảo văn bản khác nhau vì không có gì hoạt động chính xác, sau đó chọn Kiểu chữ. Nhưng nếu bạn tỉnh táo, hãy chọn ES6 / 7 và Babel.
gargantuan

Câu trả lời:


114

Tôi đã sử dụng Typecript trong dự án góc cạnh hiện tại của tôi khoảng một năm rưỡi và trong khi có một vài vấn đề với định nghĩa mỗi lúc và sau đó, dự án DefiniteTyped thực hiện một công việc tuyệt vời để theo kịp các phiên bản mới nhất của các thư viện phổ biến nhất.

Phải nói rằng có một đường cong học tập nhất định khi chuyển từ JavaScript vanilla sang TS và bạn nên tính đến khả năng của bạn và nhóm của bạn để thực hiện chuyển đổi đó. Ngoài ra, nếu bạn đang sử dụng angular 1.x, hầu hết các ví dụ bạn sẽ tìm thấy trực tuyến sẽ yêu cầu bạn dịch chúng từ JS sang TS và nói chung không có nhiều tài nguyên về việc sử dụng TS và angular 1.x ngay bây giờ .

Nếu bạn có kế hoạch sử dụng angular 2, có rất nhiều ví dụ sử dụng TS và tôi nghĩ nhóm sẽ tiếp tục cung cấp hầu hết các tài liệu trong TS, nhưng bạn chắc chắn không phải sử dụng TS để sử dụng angular 2.

ES6 có một số tính năng hay và cá nhân tôi dự định làm quen với nó nhưng tôi sẽ không coi đó là ngôn ngữ sẵn sàng sản xuất vào thời điểm này. Chủ yếu là do thiếu sự hỗ trợ của các trình duyệt hiện tại. Tất nhiên, bạn có thể viết mã của mình trong ES6 và sử dụng bộ chuyển mã để chuyển nó sang ES5, đây dường như là điều phổ biến cần làm ngay bây giờ.

Nhìn chung, tôi nghĩ rằng câu trả lời sẽ thuộc về những gì bạn và nhóm của bạn cảm thấy thoải mái khi học. Cá nhân tôi nghĩ rằng cả TS và ES6 sẽ có sự hỗ trợ tốt và tương lai lâu dài, tôi thích TS hơn bởi vì bạn có xu hướng nhận được các tính năng ngôn ngữ nhanh hơn và ngay bây giờ, hỗ trợ công cụ (theo tôi) là tốt hơn một chút.


40
ES6 không có hỗ trợ trình duyệt ?? Bạn có phải là một chính trị gia MS? Cả bản thảo và ES6 đều cần bộ chuyển mã. Có nghĩa là bạn không chạy TS hoặc ES6 trên web, thay vì sử dụng một cái gì đó như Babel. TS vào Angular 2 đã được thêm vào chỉ vì một mối quan hệ chính trị btw Google và MS
STEEL

40
@STEEL Không phải là một chính trị gia MS, bạn chỉ đang trả lời một câu trả lời tôi đã để lại hơn một năm trước khi hỗ trợ ES6 rất hạn chế. Và bạn có thể tự do nghĩ rằng quyết định của TS và Angular 2 là chính trị nhưng điều đó không thay đổi quan điểm của tôi rằng nó được viết cho ngôn ngữ đó và nhóm Angular2 đang khuyến khích sử dụng nó.
Kent Cooper

18
Điều này là từ 2 năm trước, nhưng thời gian đã cho thấy tiêu chuẩn cuối cùng chiếm ưu thế như thế nào. ES6 được hỗ trợ rất nhiều bởi hầu hết các trình duyệt hiện nay. Các lớp học, các hàm mũi tên, v.v ... Cuối cùng, chúng ta sẽ đi đến điểm mà các trình duyệt sẽ hỗ trợ một phiên bản javascript đủ để làm cho các trình dịch mã không cần thiết. Bản đánh máy sẽ luôn yêu cầu một bộ chuyển mã. Tại sao nó lại quan trọng? bởi vì nhiệm vụ của chúng tôi là các nhà phát triển web phải thúc đẩy web tiến lên và đó là bằng cách hỗ trợ các tiêu chuẩn
monzonj

3
Đó là ES6 bummer không hỗ trợ an toàn loại "thời gian biên dịch" thực tế. Có rất nhiều thứ tuyệt vời trong ES6 nhưng thực tế là tôi không thể nói "đối số này là một chuỗi (hoặc ví dụ của lớp X), chết tiệt" và có thể xác minh rằng đó là một phần của quá trình xây dựng của bạn vẫn còn tệ cho các chương trình lớn (front end và back end như nhau).
Brad Peabody

Bạn có thể sử dụng một công cụ như Flow Type để thêm hỗ trợ loại cho ES6 nếu bạn thực sự muốn. Cho đến khi ES6 trở nên phổ biến trong tất cả các trình duyệt, chuỗi công cụ của bạn sau đó sẽ bao gồm Flow-> ES6-> Babel, rất nhiều sự gián tiếp, nhưng hiện tại công việc và tôi nghĩ là một chuỗi rất phổ biến.
Prahlad Yeri

660

Cây quyết định giữa ES5, ES6 và TypeScript

Bạn có nhớ có một bước xây dựng?

  • Có - Sử dụng ES5
  • Không - tiếp tục đi

Bạn có muốn sử dụng các loại?

  • Có - Sử dụng TypeScript
  • Không - Sử dụng ES6

Thêm chi tiết

ES5 là JavaScript mà bạn biết và sử dụng trong trình duyệt ngày nay, nó là chính nó và không yêu cầu bước xây dựng để biến nó thành thứ sẽ chạy trong các trình duyệt ngày nay

ES6 (còn được gọi là ES2015 ) là lần lặp tiếp theo của JavaScript, nhưng nó không chạy trong các trình duyệt ngày nay. Có khá nhiều bộ chuyển đổi sẽ xuất ES5 để chạy trong trình duyệt. Nó vẫn là một ngôn ngữ năng động (đọc: cởi trói).

TypeScript cung cấp một hệ thống gõ tùy chọn trong khi lấy các tính năng từ các phiên bản JavaScript trong tương lai (ES6 và ES7).

Lưu ý: rất nhiều bộ chuyển đổi ngoài kia (ví dụ như babel, TypeScript) sẽ cho phép bạn sử dụng các tính năng từ các phiên bản JavaScript trong tương lai ngày hôm nay và xuất mã vẫn sẽ chạy trong các trình duyệt ngày nay.


5
Nó không đơn giản. Có rất nhiều yếu tố khác.
RaoulRubin

16
@RaoulRubin Đó là sự thật, có rất nhiều yếu tố khác, nhưng đối với một câu hỏi đóng ở đây, nó ít nhất cung cấp một nền tảng khởi đầu cho quá trình ra quyết định
Brocco

1
PS - ES6 + FlowType = Love :)
Red2678

3
@RavinderPayal có một câu hỏi thú vị, Brocco. Từ góc độ thị trường, những gì giá trị của TS vs ES5 hoặc es6 và các công cụ dọc theo những đường?
J.Wells

3
Ok, vì vậy bài viết này là một vài tuổi /. Hãy nhanh chóng chuyển tiếp đến ngày hôm nay, 28 tháng 9 năm 2017. Có phải hầu hết các trình duyệt hỗ trợ ES6?
Ngân hàng Dewey
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.