2017-11-01 18 views
5

Ví dụLàm cách nào để kiểm tra chuỗi đã cho tồn tại dưới dạng giá trị trong chuỗi enum trong Typescript?

enum ABC { A = "a", B = "bb", C = "ccc" }; 

alert("B" in ABC); // true 
alert("bb" in ABC); // false (i wanna true) 

Xin vui lòng, hãy ghi nhớ rằng chúng tôi thảo luận về các tính năng chuỗi enum.

+1

có thể trùng lặp của [Kiểm tra nếu giá trị tồn tại trong enum trong nguyên cảo] (https://stackoverflow.com/questions/43804805/check-if-value-exists-in -enum-in-typescript) –

+1

@MedetTleukabiluly - Trừ khi tôi bị nhầm lẫn, đó không phải là _exactly_ một bản sao, vì TypeScript có logic biên dịch khác nhau cho số và chuỗi enums. Giải pháp được đề xuất sẽ không hoạt động ở đây, xem kết quả được biên dịch. –

Trả lời

3

enum của bạn:

enum ABC { 
    A = "a", 
    B = "bb", 
    C = "ccc" 
}; 

trở thành này sau khi biên dịch (tại thời gian chạy):

var ABC = { 
    A: "a", 
    B: "bb", 
    C: "ccc" 
}; 

Vì vậy, bạn cần kiểm tra xem có bất kỳ giá trị nào trong ABC"bb" hay không. Để làm điều này, bạn có thể sử dụng Object.values():

Object.values(ABC).some(val => val === "bb"); // true 
Object.values(ABC).some(val => val === "foo"); // false 
3

Mã của bạn:

enum ABC { 
    A = "a", 
    B = "bb", 
    C = "ccc" 
}; 

được biên soạn với JavaScript sau (see demo):

var ABC; 
(function (ABC) { 
    ABC["A"] = "a"; 
    ABC["B"] = "bb"; 
    ABC["C"] = "ccc"; 
})(ABC || (ABC = {})); 

Đây là lý do tại sao bạn đang nhận được true cho "A" in ABC, và false cho "bb" in ABC. Thay vào đó, bạn cần phải tự tìm kiếm (ví dụ: vòng lặp) cho các giá trị; một đoạn ngắn lót có thể là thế này:

Object.keys(ABC).some(key => ABC[key] === "bb") 

(hoặc bạn có thể duyệt qua các giá trị trực tiếp sử dụng Object.values nếu được hỗ trợ)

+0

Thật không may là không có Object.values ​​trong typescript :( – karina

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