typescript - কিভাবে টাইপস্ক্রিপ্ট স্ট্রিং এ Enum রূপান্তর?




(6)

আমি টাইপস্ক্রিপ্টে নিম্নলিখিত enum সংজ্ঞায়িত করেছেন?

enum Color{
    Red, Green
}

এখন আমার ফাংশনে আমি একটি স্ট্রিং হিসাবে রঙ পাবেন। আমি নিম্নলিখিত কোড চেষ্টা করেছি:

var green= "Green";
var color : Color = <Color>green; // Error: can't convert string to enum

আমি কিভাবে একটি enum যে মান রূপান্তর করতে পারেন?


Enums মধ্যে Typecript 2.1 স্ট্রিং কী হিসাবে দৃঢ়ভাবে টাইপ করা হয়। keyof typeof উপলব্ধ স্ট্রিং কী সম্পর্কে তথ্য পেতে ব্যবহৃত হয় ( 1 ):

enum Color{
    Red, Green
}

let typedColor: Color = Color.Green;
let typedColorString: keyof typeof Color = "Green";

// Error "Black is not assignable ..." (indexing using Color["Black"] will return undefined runtime)
typedColorString = "Black";

// Error "Type 'string' is not assignable ..." (indexing works runtime)
let letColorString = "Red";
typedColorString = letColorString;

// Works fine
typedColorString = "Red";

// Works fine
const constColorString = "Red";
typedColorString = constColorString

// Works fine (thanks @SergeyT)
let letColorString = "Red";
typedColorString = letColorString as keyof typeof Color;

typedColor = Color[typedColorString];

1


TypeScript 0.9 এ Enums স্ট্রিং + সংখ্যা ভিত্তিক হয়। আপনাকে সহজ রূপান্তরগুলির জন্য টাইপ দাবির প্রয়োজন হবে না:

enum Color{
    Red, Green
}

// To String
 var green: string = Color[Color.Green];

// To Enum / number
var color : Color = Color[green];

এটা অনলাইনে চেষ্টা করুন

আমি আমার ওএসএস বইয়ের এই এবং অন্যান্য এননাম প্যাটার্ন সম্পর্কে ডকুমেন্টেশন আছে: https://basarat.gitbooks.io/typescript/content/docs/enums.html


আমি একই কম্পাইলার ত্রুটি মধ্যে দৌড়ে। Sly_cardinal এর পদ্ধতির একটি সামান্য সংক্ষিপ্ত বৈচিত্র।

var color: Color = Color[<string>colorId];

এই নোট মূল প্রশ্ন নয়, বাশারের answer সাথে সম্পর্কিত।

আমার নিজের প্রোজেক্টে একটি বিজোড় সমস্যা ছিল যেখানে কম্পাইলারটি এই কোডটির সমতুল্য ব্যবহার করে "স্ট্রিং-এ রূপান্তর করতে পারে না" এর সমতুল্য একটি ত্রুটি প্রদান করছে:

var colorId = myOtherObject.colorId; // value "Green";
var color: Color = <Color>Color[colorId]; // TSC error here: Cannot convert string to Color.

আমি দেখেছি যে কম্পাইলার টাইপ colorId বিভ্রান্ত হচ্ছে এবং এটি মনে করেছিল যে colorId একটি colorId মান ছিল এবং আইডি নয়। সমস্যার সমাধান করার জন্য আমাকে একটি স্ট্রিং হিসাবে আইডি নিক্ষেপ করতে হয়েছিল:

var colorId = <string>myOtherObject.colorId; // Force string value here
var color: Color = Color[colorId]; // Fixes lookup here.

আমি নিশ্চিত নই যে সমস্যাটির কারণ কী তবে আমি এই নোটটি এখানে রেখে দেব যদি কেউ একই সমস্যাতে চলে যায়।


নিম্নলিখিত কোড ব্যবহার করে এটি কাজ পেয়েছিলাম।

var green= "Green";
var color : Color= <Color>Color[green];

যদি টাইপসक्रिप्ट কম্পাইলার জানেন যে পরিবর্তনশীলের ধরন এই কাজগুলির চেয়ে স্ট্রিং

let colorName : string = "Green";
let color : Color = Color[colorName];

অন্যথায় আপনি স্পষ্টভাবে স্ট্রিং এ রূপান্তর করা উচিত (কম্পাইলার সতর্কতা এড়ানোর জন্য)

let colorName : any = "Green";
let color : Color = Color["" + colorName];

রানটাইম উভয় সমাধান কাজ করবে।





typescript