Bài viết này sẽ chỉ cho bạn cách tạo và sử dụng Enums trong JavaScript. Rất tiếc, javaScript không bao gồm hỗ trợ riêng cho Enums, nhưng bạn có thể tự thêm chức năng tương đương
Lưu ý rằng TypeScript, một ngôn ngữ xây dựng trên JavaScript, không bao gồm hỗ trợ cho Enums nguyên bản. Vì vậy, chúng tôi chỉ xem xét JavaScript đơn giản ở đây - không phải TypeScript
Enum là gì?
Một Enum [Kiểu liệt kê] là một cấu trúc dữ liệu chứa nhiều giá trị. Mỗi giá trị được gán cho một mã định danh – và có thể được truy cập bởi mã định danh đó
Các enum chứa các hằng số được xác định trước không được dự kiến thay đổi [chúng sẽ giống nhau khi ứng dụng được viết và khi nó được chạy để bạn luôn có thể tham khảo dữ liệu trong enum bằng cùng một mã định danh và nhận được cùng một
Đối tượng JavaScript. phương thức đóng băng []
Vì vậy, nếu không có hỗ trợ riêng cho Enums, chúng tôi làm cách nào để sử dụng Enums?
Cho biết Enum là gì – một tập hợp các cặp khóa/giá trị không thay đổi, chúng ta có thể tạo một đối tượng [có thể chứa một tập hợp các cặp khóa-giá trị] – và sau đó đóng băng nó bằng Object. đóng băng [làm cho nó không thay đổi]. Do đó, cả hai thuộc tính chính của enum đều được đáp ứng
// Declare a constant called Month, containing our Enum const Month = { JAN: 1, FEB: 2, MAR: 3 }; // Freeze it! It now can't be changed Object.freeze[Month]; // Assign a value from the Enum to a variable to test it let thisMonth = Month.MAR; console.log[thisMonth]; # Outputs 3 - the value of MAR in the Enum // Trying to add a new member to the Enum will fail - but no error is produced. The object is just frozen and won't be modified. Month.APR = 4; console.log[Month] # Will return the original frozen Month Enum - APR will not be included
Giản dị. Enums có thể chứa bất kỳ giá trị nào – bất kỳ biến nào – chuỗi, số, đối tượng, giá trị boolean, v.v.
Bạn có thể truy cập các giá trị trong enum theo tên thuộc tính như với bất kỳ loại đối tượng JavaScript nào khác
Enums cho phép nhà phát triển xác định một tập hợp các hằng số được đặt tên. Sử dụng enums có thể giúp ghi lại ý định dễ dàng hơn hoặc tạo một tập hợp các trường hợp riêng biệt. TypeScript cung cấp cả enum dạng số và dạng chuỗi
enum số
Trước tiên, chúng tôi sẽ bắt đầu với enum số, có thể quen thuộc hơn nếu bạn đến từ các ngôn ngữ khác. Một enum có thể được định nghĩa bằng từ khóa
1ts
Try
enum UserResponse {
No = 0,
Yes = 1,
}
function respond[recipient: string, message: UserResponse]: void {
// ...
}
respond["Princess Caroline", UserResponse.Yes];
ts
Try
enum Direction {
Up = 1,
Down,
Left,
Right,
}
Ở trên, chúng ta có một enum số trong đó
2 được khởi tạo vớits
Try
enum UserResponse {
No = 0,
Yes = 1,
}
function respond[recipient: string, message: UserResponse]: void {
// ...
}
respond["Princess Caroline", UserResponse.Yes];
3. Tất cả các thành viên sau được tự động tăng từ thời điểm đó. Nói cách khác,ts
Try
enum UserResponse {
No = 0,
Yes = 1,
}
function respond[recipient: string, message: UserResponse]: void {
// ...
}
respond["Princess Caroline", UserResponse.Yes];
4 có giá trịts
Try
enum UserResponse {
No = 0,
Yes = 1,
}
function respond[recipient: string, message: UserResponse]: void {
// ...
}
respond["Princess Caroline", UserResponse.Yes];
3,ts
Try
enum UserResponse {
No = 0,
Yes = 1,
}
function respond[recipient: string, message: UserResponse]: void {
// ...
}
respond["Princess Caroline", UserResponse.Yes];
6 có giá trịts
Try
enum UserResponse {
No = 0,
Yes = 1,
}
function respond[recipient: string, message: UserResponse]: void {
// ...
}
respond["Princess Caroline", UserResponse.Yes];
7,ts
Try
enum UserResponse {
No = 0,
Yes = 1,
}
function respond[recipient: string, message: UserResponse]: void {
// ...
}
respond["Princess Caroline", UserResponse.Yes];
8 có giá trịts
Try
enum UserResponse {
No = 0,
Yes = 1,
}
function respond[recipient: string, message: UserResponse]: void {
// ...
}
respond["Princess Caroline", UserResponse.Yes];
9 vàts
Try
enum UserResponse {
No = 0,
Yes = 1,
}
function respond[recipient: string, message: UserResponse]: void {
// ...
}
respond["Princess Caroline", UserResponse.Yes];
10 có giá trịts
Try
enum UserResponse {
No = 0,
Yes = 1,
}
function respond[recipient: string, message: UserResponse]: void {
// ...
}
respond["Princess Caroline", UserResponse.Yes];
11ts
Try
enum UserResponse {
No = 0,
Yes = 1,
}
function respond[recipient: string, message: UserResponse]: void {
// ...
}
respond["Princess Caroline", UserResponse.Yes];
Nếu muốn, chúng ta có thể bỏ hoàn toàn các trình khởi tạo
3ts
Try
enum UserResponse {
No = 0,
Yes = 1,
}
function respond[recipient: string, message: UserResponse]: void {
// ...
}
respond["Princess Caroline", UserResponse.Yes];
Ở đây,
2 sẽ có giá trịts
Try
enum UserResponse {
No = 0,
Yes = 1,
}
function respond[recipient: string, message: UserResponse]: void {
// ...
}
respond["Princess Caroline", UserResponse.Yes];
13,ts
Try
enum UserResponse {
No = 0,
Yes = 1,
}
function respond[recipient: string, message: UserResponse]: void {
// ...
}
respond["Princess Caroline", UserResponse.Yes];
6 sẽ có giá trịts
Try
enum UserResponse {
No = 0,
Yes = 1,
}
function respond[recipient: string, message: UserResponse]: void {
// ...
}
respond["Princess Caroline", UserResponse.Yes];
3, v.v. Hành vi tự động gia tăng này hữu ích cho các trường hợp chúng ta có thể không quan tâm đến chính các giá trị thành viên, nhưng hãy quan tâm đến việc mỗi giá trị khác biệt với các giá trị khác trong cùng một enumts
Try
enum UserResponse {
No = 0,
Yes = 1,
}
function respond[recipient: string, message: UserResponse]: void {
// ...
}
respond["Princess Caroline", UserResponse.Yes];
Sử dụng một enum rất đơn giản. chỉ cần truy cập bất kỳ thành viên nào dưới dạng thuộc tính của chính enum và khai báo các loại bằng tên của enum
ts
Try
enum UserResponse {
No = 0,
Yes = 1,
}
function respond[recipient: string, message: UserResponse]: void {
// ...
}
respond["Princess Caroline", UserResponse.Yes];
Số enums có thể được trộn lẫn trong. Câu chuyện ngắn gọn là, các enum không có bộ khởi tạo cần phải được đặt trước hoặc phải xuất hiện sau các enum số được khởi tạo với các hằng số hoặc các thành viên enum không đổi khác. Nói cách khác, những điều sau đây không được phép
1ts
Try
enum UserResponse {
No = 0,
Yes = 1,
}
function respond[recipient: string, message: UserResponse]: void {
// ...
}
respond["Princess Caroline", UserResponse.Yes];
Chuỗi enum
Chuỗi enums là một khái niệm tương tự, nhưng có một số tinh tế như tài liệu dưới đây. Trong một chuỗi enum, mỗi thành viên phải được khởi tạo liên tục bằng một chuỗi ký tự hoặc với một thành viên chuỗi enum khác
0ts
Try
enum Direction {
Up = 1,
Down,
Left,
Right,
}
Mặc dù enum chuỗi không có hành vi tăng tự động, nhưng enum chuỗi có lợi ích là chúng “tuần tự hóa” tốt. Nói cách khác, nếu bạn đang gỡ lỗi và phải đọc giá trị thời gian chạy của một enum số, thì giá trị này thường không rõ ràng - bản thân nó không truyền đạt bất kỳ ý nghĩa hữu ích nào [mặc dù thường có thể hữu ích]. Chuỗi enums cho phép bạn đưa ra một giá trị có ý nghĩa và có thể đọc được khi mã của bạn chạy, không phụ thuộc vào tên của chính thành viên enum
enum không đồng nhất
Về mặt kỹ thuật, enums có thể được trộn lẫn với các thành viên chuỗi và số, nhưng không rõ tại sao bạn lại muốn làm như vậy
1ts
Try
enum Direction {
Up = 1,
Down,
Left,
Right,
}
Trừ khi bạn đang thực sự cố gắng tận dụng hành vi thời gian chạy của JavaScript một cách thông minh, bạn không nên làm điều này
Các thành viên được tính toán và không đổi
Mỗi thành viên enum có một giá trị được liên kết với nó, có thể là hằng số hoặc được tính toán. Một thành viên enum được coi là hằng số nếu
Nó là thành viên đầu tiên trong enum và nó không có bộ khởi tạo, trong trường hợp đó, nó được gán giá trị
13ts
Tryenum UserResponse {
No = 0,
Yes = 1,
}
function respond[recipient: string, message: UserResponse]: void {
// ...
}
respond["Princess Caroline", UserResponse.Yes];
3ts
Tryenum Direction {
Up = 1,
Down,
Left,
Right,
}
Nó không có bộ khởi tạo và thành viên enum trước đó là một hằng số. Trong trường hợp này, giá trị của thành viên enum hiện tại sẽ là giá trị của thành viên enum trước đó cộng với một
4ts
Tryenum Direction {
Up = 1,
Down,
Left,
Right,
}
Thành viên enum được khởi tạo với biểu thức enum không đổi. Một biểu thức enum không đổi là một tập hợp con của các biểu thức TypeScript có thể được đánh giá đầy đủ tại thời điểm biên dịch. Một biểu thức là một biểu thức enum không đổi nếu nó là
- một biểu thức enum bằng chữ [về cơ bản là một chuỗi ký tự hoặc một ký tự số]
- một tham chiếu đến thành viên enum không đổi được xác định trước đó [có thể bắt nguồn từ một enum khác]
- một biểu thức enum hằng trong ngoặc đơn
- một trong các toán tử đơn hạng
17,ts
Tryenum UserResponse {
No = 0,
Yes = 1,
}
function respond[recipient: string, message: UserResponse]: void {
// ...
}
respond["Princess Caroline", UserResponse.Yes];
18,ts
Tryenum UserResponse {
No = 0,
Yes = 1,
}
function respond[recipient: string, message: UserResponse]: void {
// ...
}
respond["Princess Caroline", UserResponse.Yes];
19 được áp dụng cho biểu thức enum hằng sốts
Tryenum UserResponse {
No = 0,
Yes = 1,
}
function respond[recipient: string, message: UserResponse]: void {
// ...
}
respond["Princess Caroline", UserResponse.Yes];
17,ts
Tryenum UserResponse {
No = 0,
Yes = 1,
}
function respond[recipient: string, message: UserResponse]: void {
// ...
}
respond["Princess Caroline", UserResponse.Yes];
18,ts
Tryenum UserResponse {
No = 0,
Yes = 1,
}
function respond[recipient: string, message: UserResponse]: void {
// ...
}
respond["Princess Caroline", UserResponse.Yes];
02,ts
Tryenum Direction {
Up = 1,
Down,
Left,
Right,
}
03,ts
Tryenum Direction {
Up = 1,
Down,
Left,
Right,
}
04,ts
Tryenum Direction {
Up = 1,
Down,
Left,
Right,
}
05,ts
Tryenum Direction {
Up = 1,
Down,
Left,
Right,
}
06,ts
Tryenum Direction {
Up = 1,
Down,
Left,
Right,
}
07,ts
Tryenum Direction {
Up = 1,
Down,
Left,
Right,
}
08,ts
Tryenum Direction {
Up = 1,
Down,
Left,
Right,
}
09,ts
Tryenum Direction {
Up = 1,
Down,
Left,
Right,
}
10 toán tử nhị phân với các biểu thức enum không đổi dưới dạng toán hạngts
Tryenum Direction {
Up = 1,
Down,
Left,
Right,
}
Đó là lỗi thời gian biên dịch đối với các biểu thức enum không đổi được ước tính thành
11 hoặcts
Tryenum Direction {
Up = 1,
Down,
Left,
Right,
}
12ts
Tryenum Direction {
Up = 1,
Down,
Left,
Right,
}
Trong tất cả các trường hợp khác, thành viên enum được coi là đã tính
1ts
Try
enum UserResponse {
No = 0,
Yes = 1,
}
function respond[recipient: string, message: UserResponse]: void {
// ...
}
respond["Princess Caroline", UserResponse.Yes];
Union enums và các loại thành viên enum
Có một tập hợp con đặc biệt của các thành viên enum không đổi không được tính toán. thành viên enum theo nghĩa đen. Thành viên enum theo nghĩa đen là thành viên enum không đổi không có giá trị khởi tạo hoặc có giá trị được khởi tạo thành
- bất kỳ chuỗi ký tự nào [e. g.
13,ts
Tryenum Direction {
Up = 1,
Down,
Left,
Right,
}
14,ts
Tryenum Direction {
Up = 1,
Down,
Left,
Right,
}
15]ts
Tryenum Direction {
Up = 1,
Down,
Left,
Right,
}
- bất kỳ chữ số nào [e. g.
3,ts
Tryenum UserResponse {
No = 0,
Yes = 1,
}
function respond[recipient: string, message: UserResponse]: void {
// ...
}
respond["Princess Caroline", UserResponse.Yes];
17]ts
Tryenum Direction {
Up = 1,
Down,
Left,
Right,
}
- một dấu trừ đơn nguyên được áp dụng cho bất kỳ chữ số nào [e. g.
18,ts
Tryenum Direction {
Up = 1,
Down,
Left,
Right,
}
19]ts
Tryenum Direction {
Up = 1,
Down,
Left,
Right,
}
Khi tất cả các thành viên trong một enum có giá trị enum theo nghĩa đen, một số ngữ nghĩa đặc biệt sẽ phát huy tác dụng
Đầu tiên là các thành viên enum cũng trở thành các loại. Ví dụ: chúng ta có thể nói rằng một số thành viên chỉ có thể có giá trị của một thành viên enum
9ts
Try
enum UserResponse {
No = 0,
Yes = 1,
}
function respond[recipient: string, message: UserResponse]: void {
// ...
}
respond["Princess Caroline", UserResponse.Yes];
Sự thay đổi khác là bản thân các loại enum trở thành một liên minh của từng thành viên enum một cách hiệu quả. Với union enums, hệ thống loại có thể tận dụng thực tế là nó biết tập hợp chính xác các giá trị tồn tại trong chính enum. Do đó, TypeScript có thể bắt lỗi khi chúng ta có thể so sánh các giá trị không chính xác. Ví dụ
30ts
Try
enum UserResponse {
No = 0,
Yes = 1,
}
function respond[recipient: string, message: UserResponse]: void {
// ...
}
respond["Princess Caroline", UserResponse.Yes];
Trong ví dụ đó, trước tiên chúng tôi kiểm tra xem
30 không phải làts
Try
enum Direction {
Up = 1,
Down,
Left,
Right,
}
31. Nếu việc kiểm tra đó thành công, thìts
Try
enum Direction {
Up = 1,
Down,
Left,
Right,
}
32 của chúng ta sẽ bị đoản mạch và phần thân của chữ 'nếu' sẽ chạy. Tuy nhiên, nếu kiểm tra không thành công, thìts
Try
enum Direction {
Up = 1,
Down,
Left,
Right,
}
30 chỉ có thể làts
Try
enum Direction {
Up = 1,
Down,
Left,
Right,
}
31, vì vậy sẽ không có ý nghĩa gì khi xem liệu nó có bằng vớits
Try
enum Direction {
Up = 1,
Down,
Left,
Right,
}
35 hay khôngts
Try
enum Direction {
Up = 1,
Down,
Left,
Right,
}
Enums trong thời gian chạy
Enums là các đối tượng thực tồn tại trong thời gian chạy. Ví dụ, enum sau
31ts
Try
enum UserResponse {
No = 0,
Yes = 1,
}
function respond[recipient: string, message: UserResponse]: void {
// ...
}
respond["Princess Caroline", UserResponse.Yes];
thực sự có thể được chuyển đến các chức năng
32ts
Try
enum UserResponse {
No = 0,
Yes = 1,
}
function respond[recipient: string, message: UserResponse]: void {
// ...
}
respond["Princess Caroline", UserResponse.Yes];
Enums tại thời điểm biên dịch
Mặc dù Enums là các đối tượng thực tồn tại trong thời gian chạy, nhưng từ khóa
36 hoạt động khác với những gì bạn có thể mong đợi đối với các đối tượng điển hình. Thay vào đó, hãy sử dụngts
Try
enum Direction {
Up = 1,
Down,
Left,
Right,
}
37 để lấy Loại đại diện cho tất cả các khóa Enum dưới dạng chuỗits
Try
enum Direction {
Up = 1,
Down,
Left,
Right,
}
33ts
Try
enum UserResponse {
No = 0,
Yes = 1,
}
function respond[recipient: string, message: UserResponse]: void {
// ...
}
respond["Princess Caroline", UserResponse.Yes];
ánh xạ ngược
Ngoài việc tạo một đối tượng có tên thuộc tính cho các thành viên, các thành viên số enums cũng nhận được ánh xạ ngược từ giá trị enum sang tên enum. Ví dụ, trong ví dụ này
34ts
Try
enum UserResponse {
No = 0,
Yes = 1,
}
function respond[recipient: string, message: UserResponse]: void {
// ...
}
respond["Princess Caroline", UserResponse.Yes];
TypeScript biên dịch phần này thành JavaScript sau
35ts
Try
enum UserResponse {
No = 0,
Yes = 1,
}
function respond[recipient: string, message: UserResponse]: void {
// ...
}
respond["Princess Caroline", UserResponse.Yes];
Trong mã được tạo này, một enum được biên dịch thành một đối tượng lưu trữ cả ánh xạ xuôi [
38 ->ts
Try
enum Direction {
Up = 1,
Down,
Left,
Right,
}
39] và ngược [ts
Try
enum Direction {
Up = 1,
Down,
Left,
Right,
}
39 ->ts
Try
enum Direction {
Up = 1,
Down,
Left,
Right,
}
38]. Các tham chiếu đến các thành viên enum khác luôn được phát ra dưới dạng truy cập thuộc tính và không bao giờ được nội tuyếnts
Try
enum Direction {
Up = 1,
Down,
Left,
Right,
}
Hãy nhớ rằng các thành viên chuỗi enum hoàn toàn không nhận được ánh xạ ngược
ts
enum Direction {
Up = 1,
Down,
Left,
Right,
}
Try
42 bảng liệt kê
ts
enum Direction { Up = 1, Down, Left, Right, }
Try
Trong hầu hết các trường hợp, enums là một giải pháp hoàn toàn hợp lệ. Tuy nhiên đôi khi yêu cầu chặt chẽ hơn. Để tránh phải trả chi phí cho mã được tạo thêm và chuyển hướng bổ sung khi truy cập các giá trị enum, có thể sử dụng
42 enum. Const enums được xác định bằng cách sử dụng công cụ sửa đổits
Try
enum Direction {
Up = 1,
Down,
Left,
Right,
}
42 trên enums của chúng tôits
Try
enum Direction {
Up = 1,
Down,
Left,
Right,
}
36ts
Try
enum UserResponse {
No = 0,
Yes = 1,
}
function respond[recipient: string, message: UserResponse]: void {
// ...
}
respond["Princess Caroline", UserResponse.Yes];
Const enums chỉ có thể sử dụng các biểu thức enum không đổi và không giống như các enum thông thường, chúng bị loại bỏ hoàn toàn trong quá trình biên dịch. Const enum thành viên được nội tuyến tại các trang web sử dụng. Điều này là có thể vì const enums không thể có các thành viên được tính toán
37ts
Try
enum UserResponse {
No = 0,
Yes = 1,
}
function respond[recipient: string, message: UserResponse]: void {
// ...
}
respond["Princess Caroline", UserResponse.Yes];
trong mã được tạo sẽ trở thành
38ts
Try
enum UserResponse {
No = 0,
Yes = 1,
}
function respond[recipient: string, message: UserResponse]: void {
// ...
}
respond["Princess Caroline", UserResponse.Yes];
Const enum cạm bẫy
Các giá trị enum nội tuyến lúc đầu rất đơn giản, nhưng đi kèm với các hàm ý tinh vi. Những cạm bẫy này chỉ liên quan đến các const enum xung quanh [về cơ bản là const enums trong các tệp
45] và chia sẻ chúng giữa các dự án, nhưng nếu bạn đang xuất bản hoặc sử dụng các tệpts
Try
enum Direction {
Up = 1,
Down,
Left,
Right,
}
45, thì những cạm bẫy này có thể áp dụng cho bạn, bởi vìts
Try
enum Direction {
Up = 1,
Down,
Left,
Right,
}
47 chuyển đổi các tệpts
Try
enum Direction {
Up = 1,
Down,
Left,
Right,
}
48 thành các tệpts
Try
enum Direction {
Up = 1,
Down,
Left,
Right,
}
45ts
Try
enum Direction {
Up = 1,
Down,
Left,
Right,
}
- Vì những lý do được trình bày trong phần , chế độ đó về cơ bản không tương thích với const enums xung quanh. Điều này có nghĩa là nếu bạn xuất bản các giá trị enum xung quanh, thì người tiêu dùng hạ lưu sẽ không thể sử dụng các giá trị enum đó cùng một lúc
- Bạn có thể dễ dàng nhập nội tuyến các giá trị từ phiên bản A của một phụ thuộc vào thời gian biên dịch và nhập phiên bản B vào thời gian chạy. Các enum của phiên bản A và B có thể có các giá trị khác nhau, nếu bạn không cẩn thận, sẽ dẫn đến, chẳng hạn như lấy nhầm các nhánh của câu lệnh
12. Những lỗi này đặc biệt nguy hiểm vì thông thường chạy thử nghiệm tự động gần như cùng lúc với các dự án được xây dựng, với cùng các phiên bản phụ thuộc, điều này hoàn toàn bỏ sót các lỗi nàyts
Tryenum UserResponse {
No = 0,
Yes = 1,
}
function respond[recipient: string, message: UserResponse]: void {
// ...
}
respond["Princess Caroline", UserResponse.Yes];
- sẽ không bỏ qua quá trình nhập cho const enums được sử dụng làm giá trị, nhưng const enums xung quanh không đảm bảo rằng các tệp
14 thời gian chạy tồn tại. Nhập khẩu không thể giải quyết gây ra lỗi trong thời gian chạy. Cách thông thường để loại bỏ nhập khẩu một cách rõ ràng, hiện tại không cho phép các giá trị const enumts
Tryenum UserResponse {
No = 0,
Yes = 1,
}
function respond[recipient: string, message: UserResponse]: void {
// ...
}
respond["Princess Caroline", UserResponse.Yes];
Dưới đây là hai cách tiếp cận để tránh những cạm bẫy này
A. Hoàn toàn không sử dụng const enums. Bạn có thể dễ dàng với sự giúp đỡ của một kẻ nói dối. Rõ ràng điều này tránh được bất kỳ vấn đề nào với const enums, nhưng ngăn không cho dự án của bạn nội tuyến enums của chính nó. Không giống như nội tuyến enums từ các dự án khác, nội tuyến enums riêng của dự án không có vấn đề gì và có ý nghĩa về hiệu suất. b. Không xuất bản const enum xung quanh, bằng cách giải mã chúng với sự trợ giúp của. Đây là cách tiếp cận được thực hiện nội bộ bởi chính dự án TypeScript. phát ra cùng một JavaScript cho const enums như enums đơn giản. Sau đó, bạn có thể loại bỏ công cụ sửa đổi
42 khỏi tệpts
Try
enum Direction {
Up = 1,
Down,
Left,
Right,
}
45 một cách an toànts
Try
enum Direction {
Up = 1,
Down,
Left,
Right,
}
Bằng cách này, người tiêu dùng ở hạ nguồn sẽ không nội tuyến enums từ dự án của bạn, tránh những cạm bẫy ở trên, nhưng một dự án vẫn có thể nội tuyến enums của chính nó, không giống như cấm hoàn toàn const enums
môi trường xung quanh
Ambient enums được sử dụng để mô tả hình dạng của các loại enum đã tồn tại
39ts
Try
enum UserResponse {
No = 0,
Yes = 1,
}
function respond[recipient: string, message: UserResponse]: void {
// ...
}
respond["Princess Caroline", UserResponse.Yes];
Một điểm khác biệt quan trọng giữa các enum xung quanh và không xung quanh là, trong các enum thông thường, các phần tử không có bộ khởi tạo sẽ được coi là hằng nếu phần tử enum trước nó được coi là hằng số. Ngược lại, một thành viên enum xung quanh [và không phải const] không có bộ khởi tạo luôn được coi là có tính toán
Đối tượng vs Enums
Trong TypeScript hiện đại, bạn có thể không cần enum khi một đối tượng có
19 là đủts
Try
enum UserResponse {
No = 0,
Yes = 1,
}
function respond[recipient: string, message: UserResponse]: void {
// ...
}
respond["Princess Caroline", UserResponse.Yes];
0ts
Try
enum UserResponse {
No = 0,
Yes = 1,
}
function respond[recipient: string, message: UserResponse]: void {
// ...
}
respond["Princess Caroline", UserResponse.Yes];
Lập luận lớn nhất ủng hộ định dạng này so với
1 của TypeScript là nó giữ cho cơ sở mã của bạn phù hợp với trạng thái của JavaScript và khi/nếu enum được thêm vào JavaScript thì bạn có thể chuyển sang cú pháp bổ sungts
Try
enum UserResponse {
No = 0,
Yes = 1,
}
function respond[recipient: string, message: UserResponse]: void {
// ...
}
respond["Princess Caroline", UserResponse.Yes];