Enum rất hữu ích khi chúng ta muốn sử dụng các giá trị được xác định trước. Đôi khi chúng tôi muốn lấy một khóa nhất định được liên kết với một giá trị và ngược lại. Javascript/TypeScript không cung cấp một cách đơn giản vào lúc này. Vì vậy, chúng ta cần một thủ thuật đơn giản cho nó. Trong bài đăng này, tôi sẽ trình bày cách sử dụng cơ bản của enum và cách lấy khóa/giá trị
Liên kết được Tài trợ
Mục lục
sử dụng cơ bản
Chúng ta có thể định nghĩa enum có và không có giá trị. Các số liên tiếp được chỉ định khi nó được xác định không có giá trị
enum WithoutValues {
First,
Second,
Third,
}
console.log[WithoutValues.First];
console.log[WithoutValues.Second];
console.log[WithoutValues.Third];
// 0
// 1
// 2
Khi xác định một giá trị
enum WithValues1 {
First = 5,
Second,
Third,
}
console.log[WithValues1.First];
console.log[WithValues1.Second];
console.log[WithValues1.Third];
// 5
// 6
// 7
Cũng có thể gán một giá trị được đặt ở giữa. Một số liên tiếp được gán lại sau thuộc tính được xác định giá trị
enum WithValues2 {
First,
Second = 5,
Third,
}
console.log[WithValues2.First];
console.log[WithValues2.Second];
console.log[WithValues2.Third];
// 0
// 5
// 6
Chúng ta có thể gán giá trị cho tất cả các thuộc tính và gán cả chuỗi
enum LogLevel {
Trace = -20,
Debug = -10,
Info = 0,
Warn = 10,
Error = 20,
Off = 99,
}
enum LogLevelString {
Trace = "Trace-Level",
Debug = "Debug-Level",
Info = "Info-Level",
Warn = "Warn-Level",
Error = "Error-Level",
Off = "Off-Level",
}
console.log[LogLevel.Error];
console.log[LogLevelString.Error];
// 20
// Error-Level
Liên kết được Tài trợ
Cách lấy danh sách khóa
Bạn có thể nghĩ rằng thật dễ dàng để lấy danh sách khóa bằng cách sử dụng hàm
enum WithValues2 {
First,
Second = 5,
Third,
}
console.log[WithValues2.First];
console.log[WithValues2.Second];
console.log[WithValues2.Third];
// 0
// 5
// 6
3. Hãy kiểm tra kết quảconsole.log[Object.keys[LogLevel]];
// [
// '0', '10', '20',
// '99', 'Trace', '-20',
// 'Debug', '-10', 'Info',
// 'Warn', 'Error', 'Off'
// ]
console.log[Object.keys[LogLevelString]];
// [ 'Trace', 'Debug', 'Info', 'Warn', 'Error', 'Off' ]
Ối. Kết quả của nó không giống như những gì chúng ta mong đợi khi số được gán trong khi chuỗi enum trông như những gì chúng ta mong đợi. Chúng ta cần lọc nó bằng cách nào đó để chỉ lấy các khóa. Nếu enum chỉ chứa số, đoạn mã sau hoạt động để lấy khóa
enum LogLevel {
Trace = -20,
Debug = -10,
Info = 0,
Warn = 10,
Error = 20,
Off = 99,
}
const keys = Object.keys[LogLevel].filter[[x] => Number.isNaN[Number[x]]];
console.log[keys]; // keys
// [ 'Trace', 'Debug', 'Info', 'Warn', 'Error', 'Off' ]
Cách lấy danh sách giá trị
Khi chúng tôi muốn lấy danh sách giá trị, chúng tôi có thể viết như thế này bên dưới vì Khóa luôn là chuỗi
enum LogLevel {
Trace = -20,
Debug = -10,
Info = 0,
Warn = 10,
Error = 20,
Off = 99,
}
const values = Object.keys[LogLevel].filter[[x] => !Number.isNaN[Number[x]]];
console.log[values];
// [ '0', '10', '20', '99', '-20', '-10' ]
Nếu enum chỉ chứa chuỗi thì dễ
________số 8Cách kiểm tra xem giá trị có trong enum không
Đôi khi chúng ta cần kiểm tra xem giá trị có trong enum không. Thật dễ dàng để làm điều đó nếu giá trị là số. Hãy xem một ví dụ
enum LogLevel {
Info = 0,
Warn = 10,
Error = 20,
}
console.log[10 in LogLevel];
// true
console.log[11 in LogLevel];
// false
Chỉ định biến mục tiêu của bạn ở bên trái và sử dụng từ khóa
enum WithValues2 {
First,
Second = 5,
Third,
}
console.log[WithValues2.First];
console.log[WithValues2.Second];
console.log[WithValues2.Third];
// 0
// 5
// 6
4 nhưng nó không hoạt động đối với chuỗi enumenum WithValues1 {
First = 5,
Second,
Third,
}
console.log[WithValues1.First];
console.log[WithValues1.Second];
console.log[WithValues1.Third];
// 5
// 6
// 7
1Nếu giá trị được chỉ định là số thì nó hoạt động mặc dù enum chứa cả số và chuỗi. Tuy nhiên, chúng ta cần một cách khác cho chuỗi. Hãy sử dụng chức năng
enum WithValues2 {
First,
Second = 5,
Third,
}
console.log[WithValues2.First];
console.log[WithValues2.Second];
console.log[WithValues2.Third];
// 0
// 5
// 6
5 được hiển thị ở trênenum WithValues1 {
First = 5,
Second,
Third,
}
console.log[WithValues1.First];
console.log[WithValues1.Second];
console.log[WithValues1.Third];
// 5
// 6
// 7
0Cách lấy tên khóa theo giá trị
Thật đơn giản nếu nó là số enum
enum WithValues1 {
First = 5,
Second,
Third,
}
console.log[WithValues1.First];
console.log[WithValues1.Second];
console.log[WithValues1.Third];
// 5
// 6
// 7
1Nếu đó là chuỗi enum, chúng ta cần một thủ thuật vì trình biên dịch hiển thị lỗi sau
enum WithValues1 {
First = 5,
Second,
Third,
}
console.log[WithValues1.First];
console.log[WithValues1.Second];
console.log[WithValues1.Third];
// 5
// 6
// 7
2Một cách khác là làm theo
enum WithValues1 {
First = 5,
Second,
Third,
}
console.log[WithValues1.First];
console.log[WithValues1.Second];
console.log[WithValues1.Third];
// 5
// 6
// 7
3Cách lấy giá trị theo tên khóa
Chúng ta có thể lấy trực tiếp giá trị đích nếu chuỗi được chỉ định là một trong các khóa của enum. Tuy nhiên, trình biên dịch hiển thị thông báo lỗi khi xác định hàm cho nó vì nó không chấp nhận giá trị chuỗi trong
enum WithValues2 {
First,
Second = 5,
Third,
}
console.log[WithValues2.First];
console.log[WithValues2.Second];
console.log[WithValues2.Third];
// 0
// 5
// 6
6enum WithValues1 {
First = 5,
Second,
Third,
}
console.log[WithValues1.First];
console.log[WithValues1.Second];
console.log[WithValues1.Third];
// 5
// 6
// 7
4Mã sau có thể giải quyết vấn đề
enum WithValues1 {
First = 5,
Second,
Third,
}
console.log[WithValues1.First];
console.log[WithValues1.Second];
console.log[WithValues1.Third];
// 5
// 6
// 7
5Cách xử lý khi enum chứa cả số và chuỗi
Cả khóa và giá trị chỉ được chứa khi giá trị là số. Điều đó có nghĩa là chúng tôi có thể nhận được các khóa và giá trị mong muốn khi chúng tôi loại trừ nó
enum WithValues1 {
First = 5,
Second,
Third,
}
console.log[WithValues1.First];
console.log[WithValues1.Second];
console.log[WithValues1.Third];
// 5
// 6
// 7
6Nó hoạt động
Sử dụng Enum làm khóa đối tượng
Một số người có thể muốn sử dụng enum làm khóa đối tượng. Làm thế nào chúng ta có thể xác định nó trong trường hợp này?
enum WithValues1 {
First = 5,
Second,
Third,
}
console.log[WithValues1.First];
console.log[WithValues1.Second];
console.log[WithValues1.Third];
// 5
// 6
// 7
7Nó có thể được thay thế bằng định nghĩa sau
enum WithValues1 {
First = 5,
Second,
Third,
}
console.log[WithValues1.First];
console.log[WithValues1.Second];
console.log[WithValues1.Third];
// 5
// 6
// 7
8Nếu có một thuộc tính không được bao gồm trong MixEnum, lỗi sẽ hiển thị
enum WithValues1 {
First = 5,
Second,
Third,
}
console.log[WithValues1.First];
console.log[WithValues1.Second];
console.log[WithValues1.Third];
// 5
// 6
// 7
9Tương tự như vậy, một lỗi sẽ được hiển thị nếu một trong các thuộc tính bị thiếu
enum WithValues2 {
First,
Second = 5,
Third,
}
console.log[WithValues2.First];
console.log[WithValues2.Second];
console.log[WithValues2.Third];
// 0
// 5
// 6
0Nếu tất cả các thuộc tính không cần thiết, hãy thêm dấu chấm hỏi
enum WithValues2 {
First,
Second = 5,
Third,
}
console.log[WithValues2.First];
console.log[WithValues2.Second];
console.log[WithValues2.Third];
// 0
// 5
// 6
1Có thể sử dụng hàm chung cho enum không?
Tôi nghĩ sẽ hữu ích nếu tôi có thể tạo một hàm để kiểm tra xem giá trị đã chỉ định có trong enum hay để lấy khóa/giá trị. Tuy nhiên, hiện tại không thể sử dụng thuốc generic cho enum. Những gì tôi muốn làm là một cái gì đó như thế này dưới đây
enum WithValues2 {
First,
Second = 5,
Third,
}
console.log[WithValues2.First];
console.log[WithValues2.Second];
console.log[WithValues2.Third];
// 0
// 5
// 6
2Tuy nhiên, điều đó là không thể vì
enum WithValues2 {
First,
Second = 5,
Third,
}
console.log[WithValues2.First];
console.log[WithValues2.Second];
console.log[WithValues2.Third];
// 0
// 5
// 6
8 chỉ là một loại. Hàm enum WithValues2 {
First,
Second = 5,
Third,
}
console.log[WithValues2.First];
console.log[WithValues2.Second];
console.log[WithValues2.Third];
// 0
// 5
// 6
9 yêu cầu một đối tượng thay thếChấm dứt
Bạn đã tìm thấy giải pháp của bạn trong bài viết này?