Вопрос

Я работаю над файлом определений для API карт Google для TypeScript.

И мне нужно определить тип перечисления, например. google.maps.Animation который содержит два свойства: BOUNCE и DROP.

Как это сделать в TypeScript?

Это было полезно?

Решение

TypeScript 0.9+ имеет спецификацию для перечислений:

enum AnimationType {
    BOUNCE,
    DROP,
}

Последняя запятая необязательна.

Другие советы

Начиная с TypeScript 0.9 (в настоящее время альфа-версия) вы можете использовать определение перечисления следующим образом:

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;

Оба эти примера взяты непосредственно из TypeScript для программистов JavaScript.

Обратите внимание, что это отличается от спецификации 0,8. Спецификация 0.8 выглядела так, но она была помечена как экспериментальная и, вероятно, изменится, поэтому вам придется обновить любой старый код:

Отказ от ответственности - этот пример 0.8 будет работать некорректно в более новых версиях компилятора TypeScript.

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

var mySize = TShirtSize.Large;

Теперь это часть языка.Видеть TypeScriptLang.org > Основные типы > enum для документации по этому вопросу.Выдержка из документации о том, как использовать эти перечисления:

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

Потому что на момент написания этой статьи Typescript Playground сгенерирует этот код:

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();

Еще одно замечание: вы можете перечислить идентификатор/строку следующим образом:

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


}

Обновлять:

Как отметил @iX3, Машинопись 2.4 имеет поддержку строк перечисления.

Видеть:Создайте перечисление со строковыми значениями в Typescript


Оригинальный ответ:

Для значений членов String TypeScript допускает только числа в качестве значений членов перечисления.Но есть несколько решений/хаков, которые вы можете реализовать;

Решение 1:

скопировано из: https://blog.rsuter.com/how-to-implement-an-enum-with-string-values-in-typescript/

Есть простое решение:Просто перед назначением приведите строковый литерал к любому:

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

решение 2:

скопировано из: https://basarat.gitbooks.io/typescript/content/docs/types/literal-types.html

В качестве типа можно использовать строковый литерал.Например:

let foo: 'Hello';

Здесь мы создали переменную с именем foo, которая позволяет присваивать ей только буквальное значение «Hello».Это показано ниже:

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!

Перечисления в машинописном тексте:

Перечисления вводятся в машинописный язык для определения набора именованных констант.Использование перечислений может облегчить нашу жизнь.Причина этого в том, что эти константы часто легче читать, чем значение, которое представляет перечисление.

Создание перечисления:

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

Этот пример из документации по машинописному тексту очень хорошо объясняет, как работают перечисления.Обратите внимание, что наше первое значение перечисления (Up) инициализируется значением 1.Тогда все следующие члены перечисления чисел будут автоматически увеличивается от этого значения (т.е.Вниз = 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. Если мы просматриваем наш код спустя долгое время или другие программисты просматривают наш код, они не обязательно знают, что означают эти цифры.
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top