এনাম এন্ট্রিগুলির নাম কীভাবে পাবেন?


314

আমি একটি টাইপসক্রিপ্ট একটি enumটাইপ পুনরাবৃত্তি করতে এবং প্রতিটি গণিত প্রতীক নাম পেতে চাই: যেমন:

enum myEnum { entry1, entry2 }

for (var entry in myEnum) { 
    // use entry's name here, e.g., "entry1"
}

এই ক্ষুদ্র এনাম- প্যাকেজটির জন্যgetAllEnumValues এবং getAllEnumKeysআপনার প্রয়োজনে
3:38

উত্তর:


255

আপনার পোস্ট করা কোডটি কাজ করবে; এটি এনাম সদস্যদের মান সহ এনামের সমস্ত সদস্যকে মুদ্রণ করবে। উদাহরণস্বরূপ, নিম্নলিখিত কোড:

enum myEnum { bar, foo }

for (var enumMember in myEnum) {
   console.log("enum member: ", enumMember);
}

নিম্নলিখিত মুদ্রণ করবে:

Enum member: 0
Enum member: 1
Enum member: bar
Enum member: foo

পরিবর্তে যদি আপনি কেবল সদস্যের নাম এবং মানগুলি না চান তবে আপনি এরকম কিছু করতে পারেন:

for (var enumMember in myEnum) {
   var isValueProperty = parseInt(enumMember, 10) >= 0
   if (isValueProperty) {
      console.log("enum member: ", myEnum[enumMember]);
   }
}

এটি কেবল নামগুলি মুদ্রণ করবে:

এনাম সদস্য: বার

এনাম সদস্য: foo

Caveat: এটি সামান্য একটি বাস্তবায়ন বিশদের উপর নির্ভর করে: টাইপস্ক্রিপ্ট একটি জেএস বস্তুতে এনামকে বস্তুর সদস্য হিসাবে মানগুলি সংকলন করে। ভবিষ্যতে টিএস এগুলি আলাদাভাবে প্রয়োগ করার সিদ্ধান্ত নিলে উপরের কৌশলটি ভেঙে যেতে পারে।


23
পরিষ্কার হয়ে উঠতে, উপরের উত্তরটি এখনও টিএস ২.৩ হিসাবে কাজ করে। তবে, আপনি যদি "কনট এনাম" ব্যবহার করেন, কেবল "এনাম" এর পরিবর্তে, তবেই এটি কার্যকর হবে না। কনস্ট এনাম ব্যবহার করা মূলত টিএসকে একটি অনুসন্ধান এবং প্রতিস্থাপন করতে বলছে; আপনি যে জায়গাতেই MyEnum.Foo ব্যবহার করেন, এটি একই সংখ্যাসূচক মান দিয়ে প্রতিস্থাপিত হবে।
এহুদা গ্যাব্রিয়েল হিমাঙ্গো

আমি মনে করি এটি +enumMember >= 0হওয়া উচিত isFinite(+enumMember)কারণ নেতিবাচক বা ভাসমান পয়েন্টের মানগুলিও বিপরীত ম্যাপযুক্ত হয়। ( খেলার মাঠ )
স্পেনসার্য

341

যদিও উত্তর ইতিমধ্যে সরবরাহ করা হয়েছে, প্রায় কেউই ডক্সের দিকে নির্দেশ করেনি

এখানে একটি স্নিপেট

enum Enum {
    A
}
let nameOfA = Enum[Enum.A]; // "A"

মনে রাখবেন যে স্ট্রিং এনাম সদস্যরা মোটেই উত্পন্ন বিপরীত ম্যাপিং পান না।


38
এটি সেখানেও বলেছে "মনে রাখবেন যে স্ট্রিং এনাম সদস্যরা মোটেই উত্পন্ন বিপরীত ম্যাপিং পান না।"
jbojcic

1
কিভাবে প্রদর্শন করার সম্পর্কে 0বা 1এই enum থেকে? export enum Octave { ZERO = 0, ONE = 1 }
স্টিফেন

@jbojcic পরিস্থিতি সম্পর্কে এটি হল: enum Enum {"A"}; let nameOfA = Enum[Enum.A];?
টাইপসক্রিপ্ট@2.9.2

মূল্যবোধের মধ্য দিয়ে লুপিং সম্পর্কে কীভাবে?
শিয়োকো

55

ধরে নিচ্ছি যে আপনি বিধিগুলিকে অবিচল রয়েছেন এবং কেবল সংখ্যাসূচক মানগুলির সাথে এনাম তৈরি করেন, আপনি এই কোডটি ব্যবহার করতে পারেন। এটি সঠিকভাবে সেই ক্ষেত্রে পরিচালনা করে যেখানে আপনার একটি নাম রয়েছে যা কাকতালীয়ভাবে একটি বৈধ সংখ্যা

enum Color {
    Red,
    Green,
    Blue,
    "10" // wat
}

var names: string[] = [];
for(var n in Color) {
    if(typeof Color[n] === 'number') names.push(n);
}
console.log(names); // ['Red', 'Green', 'Blue', '10']

সতর্কতা আধুনিক টাইপস্ক্রিপ্টে (tsc 2.5.2 atm) আপনাকে কী সংখ্যার সাথে স্ট্রিংটি শুরু করার অনুমতি দেয় না। যেমন হিমাঙ্গোর উত্তর আরও ভাল, যেহেতু এটি সমস্ত কেস কভার করে এবং এর কোনও ডাউনসাইড নেই।
srcspider

52

আমার জন্য কী চলছে তা বোঝার একটি সহজ, ব্যবহারিক এবং প্রত্যক্ষ উপায়, এটি হল নিম্নোক্ত গণনা:

enum colors { red, green, blue };

এটিতে মূলত রূপান্তরিত হবে:

var colors = { red: 0, green: 1, blue: 2,
               [0]: "red", [1]: "green", [2]: "blue" }

এই কারণে, নিম্নলিখিতটি সত্য হবে:

colors.red === 0
colors[colors.red] === "red"
colors["red"] === 0

এটি নিম্নরূপে একটি নামকরণের একটি সহজ উপায় তৈরি করে:

var color: colors = colors.red;
console.log("The color selected is " + colors[color]);

স্ট্রিংটিকে একটি এনুমুরেটেড ভ্যালুতে রূপান্তর করার জন্য এটি একটি দুর্দান্ত উপায় তৈরি করে।

var colorName: string = "green";
var color: colors = colors.red;
if (colorName in colors) color = colors[colorName];

উপরের দুটি পরিস্থিতি অনেক বেশি সাধারণ পরিস্থিতি, কারণ সাধারণত আপনি একটি নির্দিষ্ট মানের নাম এবং জেনেরিক উপায়ে মানকে সিরিয়ালাইজ করার ক্ষেত্রে আরও বেশি আগ্রহী হন।


49

আপনি যদি কেবলমাত্র নামগুলি অনুসন্ধান করেন এবং পরে ব্যবহারটি পুনরাবৃত্তি করেন:

Object.keys(myEnum).map(key => myEnum[key]).filter(value => typeof value === 'string') as string[];

13
বা ES2017 লাইব সহ:Object.values(myEnum).filter(value => typeof value === 'string') as string[];
কেউ নয়

আমার একটি ডিক তৈরি করা দরকার ছিল এবং আমি আপনার উত্তরটি একটি সূচনা পয়েন্ট হিসাবে ব্যবহার করেছি। অন্য কারও যদি এটির প্রয়োজন হয়,Object.values(myEnum).filter(value => typeof value === 'string').map(key => { return {id: myEnum[key], type: key }; });
Fejs

25

বর্তমান টাইপস্ক্রিপ্ট সংস্করণ 1.8.9 সহ আমি টাইপ করা এনাম ব্যবহার করি:

export enum Option {
    OPTION1 = <any>'this is option 1',
    OPTION2 = <any>'this is option 2'
}

এই জাভাস্ক্রিপ্ট অবজেক্টে ফলাফল সহ:

Option = {
    "OPTION1": "this is option 1",
    "OPTION2": "this is option 2",
    "this is option 1": "OPTION1",
    "this is option 2": "OPTION2"
}

সুতরাং আমাকে কী এবং মানগুলির মাধ্যমে জিজ্ঞাসা করতে হবে এবং কেবল মানগুলি ফেরত দিতে হবে:

let optionNames: Array<any> = [];    
for (let enumValue in Option) {
    let optionNameLength = optionNames.length;

    if (optionNameLength === 0) {
        this.optionNames.push([enumValue, Option[enumValue]]);
    } else {
        if (this.optionNames[optionNameLength - 1][1] !== enumValue) {
            this.optionNames.push([enumValue, Option[enumValue]]);
        }
    }
}

এবং আমি একটি অ্যারেতে বিকল্প কীগুলি পেয়েছি:

optionNames = [ "OPTION1", "OPTION2" ];

23

টাইপস্ক্রিপ্ট ২.৪ অনুসারে, এনামগুলিতে স্ট্রিং অন্তর্নিবিষ্টদের থাকতে পারে https://www.typescriptlang.org.org/docs/handbook/release-notes/tyypecript-2-4.html

এটি আপনাকে লিখতে দেয়:

 enum Order {
      ONE = "First",
      TWO = "Second"
 }

console.log(`One is ${Order.ONE.toString()}`);

এবং এই আউটপুট পান:

একটি ফার্স্ট


17

এই সমাধান কাজ।

enum ScreenType {
    Edit = 1,
    New = 2,
    View = 4
}

var type: ScreenType = ScreenType.Edit;

console.log(ScreenType[type]); //Edit

14

এখানে পাওয়া অন্য একটি আকর্ষণীয় সমাধানটি ES6 মানচিত্রটি ব্যবহার করছে:

export enum Type {
  low,
  mid,
  high
}

export const TypeLabel = new Map<number, string>([
  [Type.low, 'Low Season'],
  [Type.mid, 'Mid Season'],
  [Type.high, 'High Season']
]);

ব্যবহারের

console.log(TypeLabel.get(Type.low)); // Low Season

10

আসুন ts-enum-util( গিথুব , এনপিএম ) আপনার জন্য কাজটি করতে দিন এবং প্রচুর অতিরিক্ত টাইপ-সেফ ইউটিলিটি সরবরাহ করুন। উভয় স্ট্রিং এবং সংখ্যাসূচক এনামগুলির সাথে কাজ করে, সংখ্যাসূচক এনামগুলির জন্য সংখ্যার সূচক বিপরীত লুকে প্রবেশের সঠিকভাবে উপেক্ষা করে:

স্ট্রিং এনাম:

import {$enum} from "ts-enum-util";

enum Option {
    OPTION1 = 'this is option 1',
    OPTION2 = 'this is option 2'
}

// type: ("OPTION1" | "OPTION2")[]
// value: ["OPTION1", "OPTION2"]
const keys= $enum(Option).getKeys();

// type: Option[]
// value: ["this is option 1", "this is option 2"]
const values = $enum(Option).getValues();

সংখ্যাযুক্ত এনাম:

enum Option {
    OPTION1,
    OPTION2
}

// type: ("OPTION1" | "OPTION2")[]
// value: ["OPTION1", "OPTION2"]
const keys= $enum(Option).getKeys();

// type: Option[]
// value: [0, 1]
const values = $enum(Option).getValues();

9

টাইপস্ক্রিপ্ট ২.৪ থেকে শুরু করে, এনামটিতে সদস্য হিসাবে আর কী থাকবে না। টাইপস্ক্রিপ্ট রিডমি থেকে উত্স

সতর্কবাণীটি হ'ল স্ট্রিং-ইনিশিয়ালড এনামগুলিকে আসল এনাম সদস্যের নাম পেতে বিপরীত-ম্যাপ করা যায় না। অন্য কথায়, আপনি "লাল" স্ট্রিংটি পেতে রঙগুলি ["RED"] লিখতে পারবেন না।

আমার সমাধান:

export const getColourKey = (value: string ) => {
    let colourKey = '';
    for (const key in ColourEnum) {
        if (value === ColourEnum[key]) {
            colourKey = key;
            break;
        }
    }
    return colourKey;
};

8

enum-valuesআমার যখন একই সমস্যা হয়েছিল তখন আপনি যে প্যাকেজটি লিখেছিলেন তা আপনি ব্যবহার করতে পারেন :

গিট: এনাম-ভ্যালু

var names = EnumValues.getNames(myEnum);

3
আপনি সত্যিই প্রশ্নের উত্তর দিচ্ছেন না, আপনার উত্তরটি কোড / ইত্যাদি দিয়ে নথিভুক্ত করা ভাল তবে আমি প্যাকেজটি দরকারী বলে মনে করি।
লুচুমা

7

উপরের কিছু উত্তরের উপর ভিত্তি করে আমি এই ধরণের-নিরাপদ ফাংশন স্বাক্ষর নিয়ে এসেছি:

export function getStringValuesFromEnum<T>(myEnum: T): keyof T {
  return Object.keys(myEnum).filter(k => typeof (myEnum as any)[k] === 'number') as any;
}

ব্যবহার:

enum myEnum { entry1, entry2 };
const stringVals = getStringValuesFromEnum(myEnum);

ধরণ stringValsহল'entry1' | 'entry2'

এটি কর্মে দেখুন


1
ফাংশন (keyof T)[]পরিবর্তে ফিরে আসা উচিত keyof T। এছাড়াও, exportআপনার খেলার মাঠকে কাজ করা বন্ধ করে দেয়।
জোয়াল্ড

7

দেখে মনে হচ্ছে যে এখানে কোনও উত্তর-মোডে স্ট্রিং-এনামগুলির সাথে কাজ করবে না strict

এনাম হিসাবে বিবেচনা করুন:

enum AnimalEnum {
  dog = "dog", cat = "cat", mouse = "mouse"
}

এটি দিয়ে অ্যাক্সেস করা হচ্ছে AnimalEnum["dog"] ফলে এমন ত্রুটি হতে পারে:

Element implicitly has an 'any' type because expression of type 'any' can't be used to index type 'typeof AnimalEnum'.ts(7053)

এই ক্ষেত্রে উপযুক্ত সমাধান, এটি লিখুন:

AnimalEnum["dog" as keyof typeof AnimalEnum]

এর keyofসাথে ব্যবহারের জন্য উজ্জ্বল সমাধান typeof! অন্যান্য সমাধানটি বেশ অস্বচ্ছ বলে মনে হচ্ছে তবে সর্বোপরি আমি মনে করি টাইপস্রিপ্টের জন্য ডিএক্স-তে উন্নতি রাখা দরকার
এনুমের

5

আমি মনে করি সর্বোত্তম উপায়টি হ'ল পছন্দসই এনাম মানগুলি ঘোষণা করা। সেভাবে তাদের অ্যাক্সেস করা পরিষ্কার এবং সুন্দর (প্রতিবার)।

enum myEnum { entry1 = 'VALUE1', entry2 = 'VALUE2' }

for (var entry in myEnum) { 
    console.log(entry);
}

উত্পাদন করবে:

VALUE1
VALUE2

5

টাইপস্ক্রিপ্ট ডকুমেন্টেশন অনুসারে, আমরা স্থির ফাংশন সহ এনামের মাধ্যমে এটি করতে পারি।

স্ট্যাটিক ফাংশন সহ এনাম নাম পান

enum myEnum { 
    entry1, 
    entry2 
}

namespace myEnum {
    export function GetmyEnumName(m: myEnum) {
      return myEnum[m];
    }
}


now we can call it like below
myEnum.GetmyEnumName(myEnum.entry1);
// result entry1 

স্ট্যাটিক ফাংশন সহ এনাম সম্পর্কে আরও পড়ার জন্য নীচের লিঙ্কটি অনুসরণ করুন https://basarat.gitbooks.io/typescript/docs/enums.html


4

সমস্ত ক্ষেত্রে আমার জন্য একমাত্র সমাধানটি কার্যকর হয় (মানগুলি স্ট্রিং হলেও এমনকি) :

var enumToString = function(enumType, enumValue) {
    for (var enumMember in enumType) {
        if (enumType[enumMember]==enumValue) return enumMember
    }
}

4

পুরানো প্রশ্ন, কিন্তু, কেন কোনও constবস্তুর মানচিত্র ব্যবহার করবেন না ?

এটি করার পরিবর্তে:

enum Foo {
    BAR = 60,
    EVERYTHING_IS_TERRIBLE = 80
}

console.log(Object.keys(Foo))
// -> ["60", "80", "BAR", "EVERYTHING_IS_TERRIBLE"]
console.log(Object.values(Foo))
// -> ["BAR", "EVERYTHING_IS_TERRIBLE", 60, 80]

এটি করুন ( as constঅভিনেতাদের দিকে মনোযোগ দিন ):

const Foo = {
    BAR: 60,
    EVERYTHING_IS_TERRIBLE: 80
} as const

console.log(Object.keys(Foo))
// -> ["BAR", "EVERYTHING_IS_TERRIBLE"]
console.log(Object.values(Foo))
// -> [60, 80]

আমি ভুল হলে আমাকে সংশোধন করে তবে console.log(Object.keys(Foo))প্রথম উদাহরণে কেবল ফিরে আসে ["BAR", "EVERYTHING_IS_TERRIBLE"]..
পিটার

@ পিটার এখানে টিএস খেলার মাঠটি দেখুন , কেবল কনসোলটি খুলুন এবং রান ক্লিক করুন। কমপক্ষে আমার জন্য, এটি প্রিন্ট করে["60", "80", "BAR", "EVERYTHING_IS_TERRIBLE"]
গ্যাব্রিয়েল ডি অলিভিরা রোহডেন

1
এটি আপনার অধিকার হিসাবে মনে হচ্ছে, মজার বিষয় যদি আপনি সংখ্যা থেকে স্ট্রিংয়ে পরিবর্তন করেন তবে আপনি যে আউটপুটটি প্রত্যাশা করেছিলেন তা পেতে পারেন, কেন টাইপস্ক্রিপ্ট স্ট্রিং এবং সংখ্যাগুলি এনামগুলিতে আলাদাভাবে পরিচালনা করে তা আমার কোনও ধারণা নেই ..
পিটার

4

আমি "টাইপস্ক্রিপ্ট পুনরায় পুনরায় এনাম কীগুলি" অনুসন্ধান করে এই প্রশ্নটি পেয়েছি। সুতরাং আমি কেবল সমাধান পোস্ট করতে চাই যা আমার ক্ষেত্রে আমার পক্ষে কাজ করে। হতে পারে এটি কারও পক্ষেও সহায়তা করবে।

আমার কেসটি নিম্নরূপ: আমি প্রতিটি এনাম কীতে পুনরাবৃত্তি করতে চাই, তারপরে কয়েকটি কী ফিল্টার করতে চাই, তারপরে এমন কিছু বস্তুর অ্যাক্সেস করতে পারি যার এনুম থেকে গুণিত মান হিসাবে কী রয়েছে। সুতরাং কোনও টিএস ত্রুটি না করেই আমি এটি করি।

    enum MyEnum = { ONE = 'ONE', TWO = 'TWO' }
    const LABELS = {
       [MyEnum.ONE]: 'Label one',
       [MyEnum.TWO]: 'Label two'
    }


    // to declare type is important - otherwise TS complains on LABELS[type]
    // also, if replace Object.values with Object.keys - 
    // - TS blames wrong types here: "string[] is not assignable to MyEnum[]"
    const allKeys: Array<MyEnum> = Object.values(MyEnum)

    const allowedKeys = allKeys.filter(
      (type) => type !== MyEnum.ONE
    )

    const allowedLabels = allowedKeys.map((type) => ({
      label: LABELS[type]
    }))

3

আমি একটি এনামুটিল ক্লাস লিখেছিলাম যা এনাম মান অনুসারে একটি পরীক্ষা করে নিচ্ছে:

export class EnumUtils {
  /**
   * Returns the enum keys
   * @param enumObj enum object
   * @param enumType the enum type
   */
  static getEnumKeys(enumObj: any, enumType: EnumType): any[] {
    return EnumUtils.getEnumValues(enumObj, enumType).map(value => enumObj[value]);
  }

  /**
   * Returns the enum values
   * @param enumObj enum object
   * @param enumType the enum type
   */
  static getEnumValues(enumObj: any, enumType: EnumType): any[] {
    return Object.keys(enumObj).filter(key => typeof enumObj[key] === enumType);
  }
}

export enum EnumType {
  Number = 'number',
  String = 'string'
}

এটি কিভাবে ব্যবহার করতে:

enum NumberValueEnum{
  A= 0,
  B= 1
}

enum StringValueEnum{
  A= 'A',
  B= 'B'
}

EnumUtils.getEnumKeys(NumberValueEnum, EnumType.number);
EnumUtils.getEnumValues(NumberValueEnum, EnumType.number);

EnumUtils.getEnumKeys(StringValueEnum, EnumType.string);
EnumUtils.getEnumValues(StringValueEnum, EnumType.string);

সংখ্যাভালিউইনাম কীগুলির ফলাফল: ["এ", "বি"]

নাম্বারভ্যালিউম মানগুলির জন্য ফলাফল: [0, 1]

স্ট্রিংভ্যালিউউনামকিসের ফলাফল: ["এ", "বি"]

স্ট্রিংভ্যালিউউনামালুয়েসের ফলাফল: ["এ", "বি"]



2

আমার এনুম এরকম:

export enum UserSorting {
    SortByFullName = "Sort by FullName", 
    SortByLastname = "Sort by Lastame", 
    SortByEmail = "Sort by Email", 
    SortByRoleName = "Sort by Role", 
    SortByCreatedAt = "Sort by Creation date", 
    SortByCreatedBy = "Sort by Author", 
    SortByUpdatedAt = "Sort by Edit date", 
    SortByUpdatedBy = "Sort by Editor", 
}

সুতরাং এই রিটার্ন অপরিশোধিত করছেন :

UserSorting[UserSorting.SortByUpdatedAt]

এই সমস্যাটি সমাধান করার জন্য, আমি পাইপ ব্যবহার করে এটি করার আরও একটি উপায় বেছে নিয়েছি:

import { Pipe, PipeTransform } from '@angular/core';

@Pipe({
    name: 'enumKey'
})
export class EnumKeyPipe implements PipeTransform {

  transform(value, args: string[] = null): any {
    let enumValue = args[0];
    var keys = Object.keys(value);
    var values = Object.values(value);
    for (var i = 0; i < keys.length; i++) {
      if (values[i] == enumValue) {
        return keys[i];
      }
    }
    return null;
    }
}

এবং এটি ব্যবহার করতে:

return this.enumKeyPipe.transform(UserSorting, [UserSorting.SortByUpdatedAt]);

2

আপনার যদি এনাম থাকে

enum Diet {
  KETO = "Ketogenic",
  ATKINS = "Atkins",
  PALEO = "Paleo",
  DGAF = "Whatever"
}

তারপরে আপনি কী এবং মানগুলি পেতে পারেন:

Object.keys(Diet).forEach((d: Diet) => {
  console.log(d); // KETO
  console.log(Diet[d]) // Ketogenic
});

এটি ত্রুটির কারণ ঘটায়:Argument of type '(d: Diet) => void' is not assignable to parameter of type '(value: string, index: number, array: string[]) => void'. Types of parameters 'd' and 'value' are incompatible. Type 'string' is not assignable to type 'MyEnum'.(2345)
56

1

আমি একটি এনাম গণনা করার জন্য একটি সহায়ক ফাংশন লিখেছিলাম:

static getEnumValues<T extends number>(enumType: {}): T[] {
  const values: T[] = [];
  const keys = Object.keys(enumType);
  for (const key of keys.slice(0, keys.length / 2)) {
    values.push(<T>+key);
  }
  return values;
}

ব্যবহার:

for (const enumValue of getEnumValues<myEnum>(myEnum)) {
  // do the thing
}

ফাংশনটি এমন কিছু প্রত্যাবর্তন করে যা সহজেই গণনা করা যায় এবং এনামের ধরণে কাস্ট করে।


0

একটি বর্তমান সংস্করণ টাইপস্ক্রিপ্ট ব্যবহার করে আপনি এনামকে আপনার পছন্দসই একটি রেকর্ডে মানচিত্র করতে এই জাতীয় ফাংশন ব্যবহার করতে পারেন। নোট করুন যে আপনি এই ফাংশনগুলির সাথে স্ট্রিং মানগুলি সংজ্ঞায়িত করতে পারবেন না কারণ তারা কোনও সংখ্যার মান সহ কীগুলি সন্ধান করে।

enum STATES {
  LOGIN,
  LOGOUT,
}

export const enumToRecordWithKeys = <E extends any>(enumeration: E): E => (
  Object.keys(enumeration)
    .filter(key => typeof enumeration[key] === 'number')
    .reduce((record, key) => ({...record, [key]: key }), {}) as E
);

export const enumToRecordWithValues = <E extends any>(enumeration: E): E => (
  Object.keys(enumeration)
    .filter(key => typeof enumeration[key] === 'number')
    .reduce((record, key) => ({...record, [key]: enumeration[key] }), {}) as E
);

const states = enumToRecordWithKeys(STATES)
const statesWithIndex = enumToRecordWithValues(STATES)

console.log(JSON.stringify({
  STATES,
  states,
  statesWithIndex,
}, null ,2));

// Console output:
{
  "STATES": {
    "0": "LOGIN",
    "1": "LOGOUT",
    "LOGIN": 0,
    "LOGOUT": 1
  },
  "states": {
    "LOGIN": "LOGIN",
    "LOGOUT": "LOGOUT"
  },
  "statesWithIndex": {
    "LOGIN": 0,
    "LOGOUT": 1
  }
}

0

এখানে ইতিমধ্যে প্রচুর উত্তর রয়েছে তবে আমি অনুভব করি যে আমি আমার সমাধানটি স্ট্যাকের মধ্যে ফেলে দেব।

টাইপস্ক্রিপ্ট খেলার মাঠ

enum AccountType {
  Google = 'goo',
  Facebook = 'boo',
  Twitter = 'wit',
}

type Key = keyof typeof AccountType // "Google" | "Facebook" | "Twitter"

// this creates a POJO of the enum "reversed" using TypeScript's Record utility
const reversed = (Object.keys(AccountType) as Key[]).reduce((acc, key) => {
  acc[AccountType[key]] = key
  return acc
}, {} as Record<AccountType, string>)

স্বচ্ছতার জন্য:

/*
 * reversed == {
 *   "goo": "Google",
 *   "boo": "Facebook",
 *   "wit": "Twitter",
 * }
 * reversed[AccountType.Google] === "Google" 👍
 */

টাইপস্ক্রিপ্ট রেকর্ডের জন্য রেফারেন্স

একটি দুর্দান্ত সহায়ক ফাংশন:

const getAccountTypeName = (type: AccountType) => {
  return reversed[type]
};

// getAccountTypeName(AccountType.Twitter) === 'Twitter'

0

এনাম মানগুলির তালিকা পেতে আপনাকে ব্যবহার করতে হবে:

enum AnimalEnum {
  DOG = "dog", 
  CAT = "cat", 
  MOUSE = "mouse"
}

Object.values(AnimalEnum);

-1

এটি আপনার প্রশ্নের সঠিক উত্তর নয় তবে এটি আপনার সমস্যার সমাধান করার কৌশল।

export module Gender {

  export enum Type {
    Female = 1,
    Male = 2
  };

  export const List = Object.freeze([
    Type[Type.Female] ,
    Type[Type.Male]
  ]);

}

আপনি নিজের তালিকা মডেলটি আপনার পছন্দ মতো প্রসারিত করতে পারেন।

export const List = Object.freeze([
    { name: Type[Type.Female], value: Type.Female } ,
    { name: Type[Type.Male], value: Type.Male }
  ]);

এখন, আপনি এটি এইভাবে ব্যবহার করতে পারেন:

for(const gender of Gender.List){
  console.log(gender.name);
  console.log(gender.value);
}

বা:

if(i === Gender.Type.Male){
  console.log("I am a man.");
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.