Javascript enum ES6

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

ts

enum UserResponse {

No = 0,

Yes = 1,

}

 

function respond[recipient: string, message: UserResponse]: void {

// ...

}

 

respond["Princess Caroline", UserResponse.Yes];

Try

1

ts

enum Direction {

Up = 1,

Down,

Left,

Right,

}

Try

Ở trên, chúng ta có một enum số trong đó

ts

enum UserResponse {

No = 0,

Yes = 1,

}

 

function respond[recipient: string, message: UserResponse]: void {

// ...

}

 

respond["Princess Caroline", UserResponse.Yes];

Try

2 được khởi tạo với

ts

enum UserResponse {

No = 0,

Yes = 1,

}

 

function respond[recipient: string, message: UserResponse]: void {

// ...

}

 

respond["Princess Caroline", UserResponse.Yes];

Try

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

enum UserResponse {

No = 0,

Yes = 1,

}

 

function respond[recipient: string, message: UserResponse]: void {

// ...

}

 

respond["Princess Caroline", UserResponse.Yes];

Try

4 có giá trị

ts

enum UserResponse {

No = 0,

Yes = 1,

}

 

function respond[recipient: string, message: UserResponse]: void {

// ...

}

 

respond["Princess Caroline", UserResponse.Yes];

Try

3,

ts

enum UserResponse {

No = 0,

Yes = 1,

}

 

function respond[recipient: string, message: UserResponse]: void {

// ...

}

 

respond["Princess Caroline", UserResponse.Yes];

Try

6 có giá trị

ts

enum UserResponse {

No = 0,

Yes = 1,

}

 

function respond[recipient: string, message: UserResponse]: void {

// ...

}

 

respond["Princess Caroline", UserResponse.Yes];

Try

7,

ts

enum UserResponse {

No = 0,

Yes = 1,

}

 

function respond[recipient: string, message: UserResponse]: void {

// ...

}

 

respond["Princess Caroline", UserResponse.Yes];

Try

8 có giá trị

ts

enum UserResponse {

No = 0,

Yes = 1,

}

 

function respond[recipient: string, message: UserResponse]: void {

// ...

}

 

respond["Princess Caroline", UserResponse.Yes];

Try

9 và

ts

enum UserResponse {

No = 0,

Yes = 1,

}

 

function respond[recipient: string, message: UserResponse]: void {

// ...

}

 

respond["Princess Caroline", UserResponse.Yes];

Try

10 có giá trị

ts

enum UserResponse {

No = 0,

Yes = 1,

}

 

function respond[recipient: string, message: UserResponse]: void {

// ...

}

 

respond["Princess Caroline", UserResponse.Yes];

Try

11

Nếu muốn, chúng ta có thể bỏ hoàn toàn các trình khởi tạo

ts

enum UserResponse {

No = 0,

Yes = 1,

}

 

function respond[recipient: string, message: UserResponse]: void {

// ...

}

 

respond["Princess Caroline", UserResponse.Yes];

Try

3

Ở đây,

ts

enum UserResponse {

No = 0,

Yes = 1,

}

 

function respond[recipient: string, message: UserResponse]: void {

// ...

}

 

respond["Princess Caroline", UserResponse.Yes];

Try

2 sẽ có giá trị

ts

enum UserResponse {

No = 0,

Yes = 1,

}

 

function respond[recipient: string, message: UserResponse]: void {

// ...

}

 

respond["Princess Caroline", UserResponse.Yes];

Try

13,

ts

enum UserResponse {

No = 0,

Yes = 1,

}

 

function respond[recipient: string, message: UserResponse]: void {

// ...

}

 

respond["Princess Caroline", UserResponse.Yes];

Try

6 sẽ có giá trị

ts

enum UserResponse {

No = 0,

Yes = 1,

}

 

function respond[recipient: string, message: UserResponse]: void {

// ...

}

 

respond["Princess Caroline", UserResponse.Yes];

Try

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 enum

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

enum UserResponse {

No = 0,

Yes = 1,

}

 

function respond[recipient: string, message: UserResponse]: void {

// ...

}

 

respond["Princess Caroline", UserResponse.Yes];

Try

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

ts

enum UserResponse {

No = 0,

Yes = 1,

}

 

function respond[recipient: string, message: UserResponse]: void {

// ...

}

 

respond["Princess Caroline", UserResponse.Yes];

Try

1

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

ts

enum Direction {

Up = 1,

Down,

Left,

Right,

}

Try

0

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

ts

enum Direction {

Up = 1,

Down,

Left,

Right,

}

Try

1

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ị

    ts

    enum UserResponse {

    No = 0,

    Yes = 1,

    }

     

    function respond[recipient: string, message: UserResponse]: void {

    // ...

    }

     

    respond["Princess Caroline", UserResponse.Yes];

    Try

    13

    ts

    enum Direction {

    Up = 1,

    Down,

    Left,

    Right,

    }

    Try

    3
  • 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

    ts

    enum Direction {

    Up = 1,

    Down,

    Left,

    Right,

    }

    Try

    4
  • 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à

    1. 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ố]
    2. 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]
    3. một biểu thức enum hằng trong ngoặc đơn
    4. một trong các toán tử đơn hạng

      ts

      enum UserResponse {

      No = 0,

      Yes = 1,

      }

       

      function respond[recipient: string, message: UserResponse]: void {

      // ...

      }

       

      respond["Princess Caroline", UserResponse.Yes];

      Try

      17,

      ts

      enum UserResponse {

      No = 0,

      Yes = 1,

      }

       

      function respond[recipient: string, message: UserResponse]: void {

      // ...

      }

       

      respond["Princess Caroline", UserResponse.Yes];

      Try

      18,

      ts

      enum UserResponse {

      No = 0,

      Yes = 1,

      }

       

      function respond[recipient: string, message: UserResponse]: void {

      // ...

      }

       

      respond["Princess Caroline", UserResponse.Yes];

      Try

      19 được áp dụng cho biểu thức enum hằng số
    5. ts

      enum UserResponse {

      No = 0,

      Yes = 1,

      }

       

      function respond[recipient: string, message: UserResponse]: void {

      // ...

      }

       

      respond["Princess Caroline", UserResponse.Yes];

      Try

      17,

      ts

      enum UserResponse {

      No = 0,

      Yes = 1,

      }

       

      function respond[recipient: string, message: UserResponse]: void {

      // ...

      }

       

      respond["Princess Caroline", UserResponse.Yes];

      Try

      18,

      ts

      enum Direction {

      Up = 1,

      Down,

      Left,

      Right,

      }

      Try

      02,

      ts

      enum Direction {

      Up = 1,

      Down,

      Left,

      Right,

      }

      Try

      03,

      ts

      enum Direction {

      Up = 1,

      Down,

      Left,

      Right,

      }

      Try

      04,

      ts

      enum Direction {

      Up = 1,

      Down,

      Left,

      Right,

      }

      Try

      05,

      ts

      enum Direction {

      Up = 1,

      Down,

      Left,

      Right,

      }

      Try

      06,

      ts

      enum Direction {

      Up = 1,

      Down,

      Left,

      Right,

      }

      Try

      07,

      ts

      enum Direction {

      Up = 1,

      Down,

      Left,

      Right,

      }

      Try

      08,

      ts

      enum Direction {

      Up = 1,

      Down,

      Left,

      Right,

      }

      Try

      09,

      ts

      enum Direction {

      Up = 1,

      Down,

      Left,

      Right,

      }

      Try

      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ạng

    Đó 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

    ts

    enum Direction {

    Up = 1,

    Down,

    Left,

    Right,

    }

    Try

    11 hoặc

    ts

    enum Direction {

    Up = 1,

    Down,

    Left,

    Right,

    }

    Try

    12

Trong tất cả các trường hợp khác, thành viên enum được coi là đã tính

ts

enum UserResponse {

No = 0,

Yes = 1,

}

 

function respond[recipient: string, message: UserResponse]: void {

// ...

}

 

respond["Princess Caroline", UserResponse.Yes];

Try

1

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.

    ts

    enum Direction {

    Up = 1,

    Down,

    Left,

    Right,

    }

    Try

    13,

    ts

    enum Direction {

    Up = 1,

    Down,

    Left,

    Right,

    }

    Try

    14,

    ts

    enum Direction {

    Up = 1,

    Down,

    Left,

    Right,

    }

    Try

    15]
  • bất kỳ chữ số nào [e. g.

    ts

    enum UserResponse {

    No = 0,

    Yes = 1,

    }

     

    function respond[recipient: string, message: UserResponse]: void {

    // ...

    }

     

    respond["Princess Caroline", UserResponse.Yes];

    Try

    3,

    ts

    enum Direction {

    Up = 1,

    Down,

    Left,

    Right,

    }

    Try

    17]
  • một dấu trừ đơn nguyên được áp dụng cho bất kỳ chữ số nào [e. g.

    ts

    enum Direction {

    Up = 1,

    Down,

    Left,

    Right,

    }

    Try

    18,

    ts

    enum Direction {

    Up = 1,

    Down,

    Left,

    Right,

    }

    Try

    19]

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

ts

enum UserResponse {

No = 0,

Yes = 1,

}

 

function respond[recipient: string, message: UserResponse]: void {

// ...

}

 

respond["Princess Caroline", UserResponse.Yes];

Try

9

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ụ

ts

enum UserResponse {

No = 0,

Yes = 1,

}

 

function respond[recipient: string, message: UserResponse]: void {

// ...

}

 

respond["Princess Caroline", UserResponse.Yes];

Try

30

Trong ví dụ đó, trước tiên chúng tôi kiểm tra xem

ts

enum Direction {

Up = 1,

Down,

Left,

Right,

}

Try

30 không phải là

ts

enum Direction {

Up = 1,

Down,

Left,

Right,

}

Try

31. Nếu việc kiểm tra đó thành công, thì

ts

enum Direction {

Up = 1,

Down,

Left,

Right,

}

Try

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

enum Direction {

Up = 1,

Down,

Left,

Right,

}

Try

30 chỉ có thể là

ts

enum Direction {

Up = 1,

Down,

Left,

Right,

}

Try

31, vì vậy sẽ không có ý nghĩa gì khi xem liệu nó có bằng với

ts

enum Direction {

Up = 1,

Down,

Left,

Right,

}

Try

35 hay không

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

ts

enum UserResponse {

No = 0,

Yes = 1,

}

 

function respond[recipient: string, message: UserResponse]: void {

// ...

}

 

respond["Princess Caroline", UserResponse.Yes];

Try

31

thực sự có thể được chuyển đến các chức năng

ts

enum UserResponse {

No = 0,

Yes = 1,

}

 

function respond[recipient: string, message: UserResponse]: void {

// ...

}

 

respond["Princess Caroline", UserResponse.Yes];

Try

32

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

ts

enum Direction {

Up = 1,

Down,

Left,

Right,

}

Try

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ụng

ts

enum Direction {

Up = 1,

Down,

Left,

Right,

}

Try

37 để lấy Loại đại diện cho tất cả các khóa Enum dưới dạng chuỗi

ts

enum UserResponse {

No = 0,

Yes = 1,

}

 

function respond[recipient: string, message: UserResponse]: void {

// ...

}

 

respond["Princess Caroline", UserResponse.Yes];

Try

33

á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

ts

enum UserResponse {

No = 0,

Yes = 1,

}

 

function respond[recipient: string, message: UserResponse]: void {

// ...

}

 

respond["Princess Caroline", UserResponse.Yes];

Try

34

TypeScript biên dịch phần này thành JavaScript sau

ts

enum UserResponse {

No = 0,

Yes = 1,

}

 

function respond[recipient: string, message: UserResponse]: void {

// ...

}

 

respond["Princess Caroline", UserResponse.Yes];

Try

35

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 [

ts

enum Direction {

Up = 1,

Down,

Left,

Right,

}

Try

38 ->

ts

enum Direction {

Up = 1,

Down,

Left,

Right,

}

Try

39] và ngược [

ts

enum Direction {

Up = 1,

Down,

Left,

Right,

}

Try

39 ->

ts

enum Direction {

Up = 1,

Down,

Left,

Right,

}

Try

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ến

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ê

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

ts

enum Direction {

Up = 1,

Down,

Left,

Right,

}

Try

42 enum. Const enums được xác định bằng cách sử dụng công cụ sửa đổi

ts

enum Direction {

Up = 1,

Down,

Left,

Right,

}

Try

42 trên enums của chúng tôi

ts

enum UserResponse {

No = 0,

Yes = 1,

}

 

function respond[recipient: string, message: UserResponse]: void {

// ...

}

 

respond["Princess Caroline", UserResponse.Yes];

Try

36

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

ts

enum UserResponse {

No = 0,

Yes = 1,

}

 

function respond[recipient: string, message: UserResponse]: void {

// ...

}

 

respond["Princess Caroline", UserResponse.Yes];

Try

37

trong mã được tạo sẽ trở thành

ts

enum UserResponse {

No = 0,

Yes = 1,

}

 

function respond[recipient: string, message: UserResponse]: void {

// ...

}

 

respond["Princess Caroline", UserResponse.Yes];

Try

38

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

ts

enum Direction {

Up = 1,

Down,

Left,

Right,

}

Try

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ệp

ts

enum Direction {

Up = 1,

Down,

Left,

Right,

}

Try

45, thì những cạm bẫy này có thể áp dụng cho bạn, bởi vì

ts

enum Direction {

Up = 1,

Down,

Left,

Right,

}

Try

47 chuyển đổi các tệp

ts

enum Direction {

Up = 1,

Down,

Left,

Right,

}

Try

48 thành các tệp

ts

enum Direction {

Up = 1,

Down,

Left,

Right,

}

Try

45

  1. 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
  2. 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

    ts

    enum UserResponse {

    No = 0,

    Yes = 1,

    }

     

    function respond[recipient: string, message: UserResponse]: void {

    // ...

    }

     

    respond["Princess Caroline", UserResponse.Yes];

    Try

    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ày
  3. 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

    ts

    enum UserResponse {

    No = 0,

    Yes = 1,

    }

     

    function respond[recipient: string, message: UserResponse]: void {

    // ...

    }

     

    respond["Princess Caroline", UserResponse.Yes];

    Try

    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 enum

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

ts

enum Direction {

Up = 1,

Down,

Left,

Right,

}

Try

42 khỏi tệp

ts

enum Direction {

Up = 1,

Down,

Left,

Right,

}

Try

45 một cách an toàn

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

ts

enum UserResponse {

No = 0,

Yes = 1,

}

 

function respond[recipient: string, message: UserResponse]: void {

// ...

}

 

respond["Princess Caroline", UserResponse.Yes];

Try

39

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ó

ts

enum UserResponse {

No = 0,

Yes = 1,

}

 

function respond[recipient: string, message: UserResponse]: void {

// ...

}

 

respond["Princess Caroline", UserResponse.Yes];

Try

19 là đủ

ts

enum UserResponse {

No = 0,

Yes = 1,

}

 

function respond[recipient: string, message: UserResponse]: void {

// ...

}

 

respond["Princess Caroline", UserResponse.Yes];

Try

0

Lập luận lớn nhất ủng hộ định dạng này so với

ts

enum UserResponse {

No = 0,

Yes = 1,

}

 

function respond[recipient: string, message: UserResponse]: void {

// ...

}

 

respond["Princess Caroline", UserResponse.Yes];

Try

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ổ sung

Tôi có thể sử dụng enum trong JavaScript không?

Enums là một trong số ít tính năng mà TypeScript có mà không phải là tiện ích mở rộng ở cấp độ loại của JavaScript . 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 trong ví dụ JavaScript là gì?

Enum Sử dụng Đối tượng . Đối tượng có thể có các cặp khóa-giá trị trong đó khóa có thể được coi là giá trị enum và vấn đề có thể là bất kỳ thứ gì. Ví dụ. Hãy sử dụng một đối tượng Javascript để triển khai một enum cho các hướng như bắc, đông, tây và nam .

Bạn có thể sử dụng == cho enum không?

phương thức equals sử dụng toán tử == bên trong để kiểm tra xem hai enum có bằng nhau hay không . Điều này có nghĩa là, Bạn có thể so sánh Enum bằng cả phương thức == và bằng.

Từ khóa enum trong JavaScript là gì?

Từ khóa enum khai báo loại liệt kê [không thể thay đổi] . Một enum là một "lớp" đặc biệt đại diện cho một nhóm các hằng số [các biến không thể thay đổi, như các biến cuối cùng].

Chủ Đề