টাইপস্ক্রিপ্টে এনামের মতো টাইপ কীভাবে তৈরি করবেন?


120

আমি টাইপস্ক্রিপ্টের জন্য গুগল ম্যাপস এপিআইয়ের একটি সংজ্ঞা ফাইলে কাজ করছি।

এবং আমি যেমন একটি এনাম যেমন টাইপ যেমন সংজ্ঞায়িত করা প্রয়োজন। google.maps.Animationযার দুটি বৈশিষ্ট্য রয়েছে: BOUNCEএবং DROP

এটি কীভাবে টাইপস্ক্রিপ্টে করা উচিত?


3
Google মানচিত্র v3 এর সংজ্ঞা এখন সম্পূর্ণ এবং পাওয়া যাবে গিটহাব এবং NuGet
eNepper

উত্তর:


140

টাইপস্ক্রিপ্ট 0.9+ এর এনামগুলির জন্য একটি স্পেসিফিকেশন রয়েছে:

enum AnimationType {
    BOUNCE,
    DROP,
}

চূড়ান্ত কমা optionচ্ছিক।


11
আমি enumএই পর্যায়ে কনস্ট্রাক্টটি ব্যবহারের বিরুদ্ধে পরামর্শ দেব কারণ টাইপস্ক্রিপ্ট দলটি এটি পরিবর্তন করতে চলেছে তা বেশ পরিষ্কার করে দিয়েছে - তাই এটি ভেঙে যাবে।
ফেন্টন

1
দয়া করে সম্পাদনা সরঞ্জামগুলিতে নিজেকে আরামদায়ক করুন, উদাহরণস্বরূপ কোড সহ আপনি নিজের উত্তরে যুক্ত করুন। আমি আপনার উত্তরে এটি পরিবর্তন করেছি, দয়া করে একবার দেখুন। এছাড়াও ভাষা বৈশিষ্ট্য সম্পর্কিত কোনও আলোচনা থাকলে দয়া করে কিছু রেফারেন্স রেখে দিন।
hakre

এনাম অ্যানিমেশন {BOUNCE = 1, ড্রপ}, যেহেতু মানচিত্রের এপিআই এগুলি তাদের সংজ্ঞায়িত করে।
ডিসিস্ট


এনাম এবং এর সদস্য নামকরণের কনভেনশনগুলি সি # তে সমান। (উভয়ই মাইক্রোসফ্ট থেকে)। এটি পাস্কেলকেস। UPPER_CASE নয়।
ডোমিনিক

66

টাইপস্ক্রিপ্ট ০.৯ অনুসারে (বর্তমানে একটি আলফা রিলিজ) আপনি এনাম সংজ্ঞাটি ব্যবহার করতে পারেন:

enum TShirtSize {
  Small,
  Medium,
  Large
}

var mySize = TShirtSize.Large;

ডিফল্টরূপে, এই গণনাগুলি যথাক্রমে 0, 1 এবং 2 নির্ধারিত হবে। আপনি যদি এই সংখ্যাগুলি স্পষ্টভাবে সেট করতে চান তবে আপনি এনাম ঘোষণার অংশ হিসাবে এটি করতে পারেন।

সুস্পষ্ট সদস্যদের সাথে 6.2 গণনা তালিকাবদ্ধ করা

enum TShirtSize {
  Small = 3,
  Medium = 5,
  Large = 8
}

var mySize = TShirtSize.Large;

এই দুটি উদাহরণই জাভাস্ক্রিপ্ট প্রোগ্রামারদের জন্য টাইপস্ক্রিপ্টের বাইরে সরাসরি তুলে নিয়েছে ।

নোট করুন যে এটি 0.8 নির্দিষ্টকরণের থেকে পৃথক। ০.৮ স্পেসিফিকেশনটি এর মতো দেখায় - তবে এটি পরীক্ষামূলক হিসাবে চিহ্নিত হয়েছে এবং সম্ভবত এটি পরিবর্তিত হতে পারে, সুতরাং আপনাকে কোনও পুরানো কোড আপডেট করতে হবে:

দাবি অস্বীকার - এই 0.8 উদাহরণটি টাইপস্ক্রিপ্ট সংকলকটির নতুন সংস্করণগুলিতে নষ্ট হবে।

enum TShirtSize {
  Small: 3,
  Medium: 5,
  Large: 8
}

var mySize = TShirtSize.Large;

3
এটি এখন স্বীকৃত উত্তর হওয়া উচিত কারণ এটি এখনও আরসিতে কাজ করছে এবং তাই টিএসের ভবিষ্যতের সংস্করণগুলি ভেঙে যাওয়ার সম্ভাবনা নেই।
এড্রিয়ান গ্রিগোর

24

এটি এখন ভাষার অংশ। এটিতে নথিপত্রের জন্য টাইপস্ক্রিপ্টল্যাং.অর্গআ> বেসিক প্রকারগুলি> এনম দেখুন । এই এনামগুলিকে কীভাবে ব্যবহার করবেন সে সম্পর্কে ডকুমেন্টেশনের একটি অংশ:

enum Color {Red, Green, Blue};
var c: Color = Color.Green;

অথবা ম্যানুয়াল ব্যাকিং নম্বর সহ:

enum Color {Red = 1, Green = 2, Blue = 4};
var c: Color = Color.Green;

উদাহরণস্বরূপ আপনি এনাম নামটিতে ফিরে যেতে পারেন Color[2]

এই সমস্ত কীভাবে একসাথে চলে যায় তার উদাহরণ এখানে:

module myModule {
    export enum Color {Red, Green, Blue};

    export class MyClass {
        myColor: Color;

        constructor() {
            console.log(this.myColor);
            this.myColor = Color.Blue;
            console.log(this.myColor);
            console.log(Color[this.myColor]);
        }
    }
}

var foo = new myModule.MyClass();

এটি লগ হবে:

undefined  
2  
Blue

কারণ, এটি লেখার সময়, টাইপস্ক্রিপ্ট প্লেগ্রাউন্ড এই কোডটি তৈরি করবে:

var myModule;
(function (myModule) {
    (function (Color) {
        Color[Color["Red"] = 0] = "Red";
        Color[Color["Green"] = 1] = "Green";
        Color[Color["Blue"] = 2] = "Blue";
    })(myModule.Color || (myModule.Color = {}));
    var Color = myModule.Color;
    ;
    var MyClass = (function () {
        function MyClass() {
            console.log(this.myColor);
            this.myColor = Color.Blue;
            console.log(this.myColor);
            console.log(Color[this.myColor]);
        }
        return MyClass;
    })();
    myModule.MyClass = MyClass;
})(myModule || (myModule = {}));
var foo = new myModule.MyClass();

14

কেবলমাত্র অন্য একটি নোট যা আপনি নীচের সাথে একটি আইডি / স্ট্রিং এনাম করতে পারেন:

class EnumyObjects{
    public static BOUNCE={str:"Bounce",id:1};
    public static DROP={str:"Drop",id:2};
    public static FALL={str:"Fall",id:3};


}

2
আপনি কীভাবে এগুলি অ্যাক্সেস করবেন strএবং এটি idব্যবহার করে?
কেবিএ

1
EnumyObjects.BOUNCE.str মানটি অ্যাক্সেস করবে।
সম্পন্ন_মারসন

2
এই ডিজাইনের সমস্যাটি হ'ল অবজেক্টগুলি সমস্ত পরিবর্তনযোগ্য, যা সমস্যার কারণ হতে পারে: goo.gl/CT4Ip
ফেন্টন

চান abstract classযেহেতু টাইপ করা বিষয় একটি একটি ধারণা নেই আরো ইনস্ট্যান্স প্রতিরোধ উপযুক্ত হতে static class?
জোকুল

10

আপডেট :

@ আইএক্স 3 দ্বারা উল্লিখিত হিসাবে, টাইপসক্রিপ্ট 2.4এনাম স্ট্রিংগুলির সমর্থন করে।

দেখুন: টাইপস্ক্রিপ্টে স্ট্রিং মান সহ একটি এনাম তৈরি করুন


আসল উত্তর:

স্ট্রিং সদস্যের মানগুলির জন্য, টাইপসক্রিপ্ট কেবল এনাম সদস্যের মান হিসাবে সংখ্যাকে মঞ্জুরি দেয়। তবে কয়েকটি সমাধান / হ্যাক আপনি প্রয়োগ করতে পারেন;

সমাধান 1:

থেকে অনুলিপি করা হয়েছে: https://blog.rsuter.com/how-to-implement-an-enum-with-string-values-in-tyypecript/

একটি সহজ সমাধান রয়েছে: নির্ধারণের আগে যে কোনওটির কাছে কেবল স্ট্রিংকে আক্ষরিক কাস্ট করুন:

export enum Language {
    English = <any>"English",
    German = <any>"German",
    French = <any>"French",
    Italian = <any>"Italian"
}

সমাধান 2:

থেকে অনুলিপি করা হয়েছে: https://basarat.gitbooks.io/tyypecript/content/docs/tyype/literal-tyype.html

আপনি টাইপ হিসাবে একটি স্ট্রিং আক্ষরিক ব্যবহার করতে পারেন। উদাহরণ স্বরূপ:

let foo: 'Hello';

এখানে আমরা foo নামক একটি ভেরিয়েবল তৈরি করেছি যা কেবলমাত্র 'হ্যালো' এর জন্য আক্ষরিক মান নির্ধারণ করতে দেয়। এটি নীচে প্রদর্শিত হয়:

let foo: 'Hello';
foo = 'Bar'; // Error: "Bar" is not assignable to type "Hello"

এগুলি তাদের নিজস্বভাবে খুব কার্যকর নয় তবে একটি শক্তিশালী (এবং দরকারী) বিমূর্ততা তৈরি করতে টাইপ ইউনিয়নে মিশ্রিত করা যেতে পারে যেমন:

type CardinalDirection =
    "North"
    | "East"
    | "South"
    | "West";

function move(distance: number, direction: CardinalDirection) {
    // ...
}

move(1,"North"); // Okay
move(1,"Nurth"); // Error!

1
টাইপস্ক্রিপ্ট ২.৪ এ এনামগুলিতে আক্ষরিক ধরণের স্ট্রিংয়ের জন্য সমর্থন অন্তর্ভুক্ত রয়েছে। দেখুন stackoverflow.com/questions/15490560/... এবং blogs.msdn.microsoft.com/typescript/2017/06/27/...
iX3

1

টাইপস্ক্রিপ্টে এনামস:

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

এনাম তৈরি করা:

enum Direction {
    Up = 1,
    Down,
    Left,
    Right,
}

টাইপস্ক্রিপ্ট ডক্সের এই উদাহরণটি এনামগুলি কীভাবে কাজ করে তা খুব সুন্দরভাবে ব্যাখ্যা করে। লক্ষ্য করুন যে আমাদের প্রথম এনাম মান (উপরে) 1 দিয়ে সূচনা হয়েছে en এনামের নীচের সমস্ত সদস্যের পরে এই মানটি (যেমন ডাউন = 2, বাম = 3, ডান = 4) থেকে স্বয়ংক্রিয়ভাবে বর্ধিত হবে । যদি আমরা 1 দিয়ে প্রথম মানটি আরম্ভ না করি তবে এনাম 0 থেকে শুরু হবে এবং তারপরে অটো ইনক্রিমেন্ট (যেমন ডাউন = 1, বাম = 2, ডান = 3)।

একটি এনাম ব্যবহার:

আমরা নিম্নলিখিত পদ্ধতিতে এনামের মানগুলি অ্যাক্সেস করতে পারি:

Direction.Up;     // first the enum name, then the dot operator followed by the enum value
Direction.Down;

লক্ষ্য করুন যে এইভাবে আমরা আমাদের কোডটি লেখার ক্ষেত্রে আরও অনেক বর্ণনামূলক । এনামগণ মূলত আমাদের যাদু সংখ্যার ব্যবহার থেকে বিরত রাখেন (নম্বরগুলি যা কিছু সত্তার প্রতিনিধিত্ব করে কারণ প্রোগ্রামার একটি নির্দিষ্ট প্রসঙ্গে তাদের একটি অর্থ দিয়েছে)। নিম্নলিখিত কারণগুলির কারণে ম্যাজিক নম্বরগুলি খারাপ:

  1. আমাদের আরও কঠিন চিন্তা করতে হবে, আমাদের কোড সম্পর্কে যুক্তি দেওয়ার আগে আমাদের প্রথমে একটি সত্তায় নম্বরটি অনুবাদ করতে হবে।
  2. আমরা যদি দীর্ঘ সময় পরে আমাদের কোড পর্যালোচনা করি, বা অন্যান্য প্রোগ্রামাররা আমাদের কোড পর্যালোচনা করে, তারা এই সংখ্যাগুলির অর্থ কী তা অগত্যা জানে না।
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.