Перечисления против постоянных различий в Typescript - PullRequest
3 голосов
/ 16 октября 2019

Если мне нужно использовать константные переменные, я использую этот подход, поскольку он имеет тип безопасности.

export class LocalStorage {
    static USER_INFO = "user-info";
    static PROFILE_INFO = "profile-info";   
}

Но, похоже, мы можем использовать string enums примерно так:

export enum LocalStorage {
    USER_INFO = "user-info";
    PROFILE_INFO = "profile-info";   
 } 

В чем разница между этими двумя подходами?

Ответы [ 3 ]

3 голосов
/ 16 октября 2019

В то время как оба подхода выполняют работу для простых сценариев. Всегда полезно использовать конструкции по назначению.

Ваш класс может непреднамеренно перерасти в нечто большее, чем просто удержание static s. Приводит к объединению проблем. Например, в будущем вы можете подумать, что необходимо добавить функции CRUD для локального хранилища, indexedDB или куки.

Тогда возникает вопрос об использовании const enum с или просто enum с.

Если вам нужно скомпилировать enum во время выполнения, тогда используйте обычный TS enum. В противном случае const enum существует только для того, чтобы помочь с безопасностью типов, менее сгенерированным кодом и минимизированным косвенным доступом, но без значений поиска во время выполнения.

3 голосов
/ 16 октября 2019

Я согласен с @VLAZ, лучший подход может определенно отличаться. Вероятно, наиболее значимым преимуществом использования enum является возможность повысить безопасность типов ваших функций.

export enum LocalStorage {
    USER_INFO = "user-info",
    PROFILE_INFO = "profile-info"
} 

function doSomething(l: LocalStorage) {
}

doSomething("foo"); // error, "foo" is not LocalStorage
doSomething("user-info"); // error, "user-info" is not LocalStorage
doSomething(LocalStorage.USER_INFO); // compiles

В целом, перечисления предлагают улучшенную безопасность типов (там, где они имеют смысл) и расширяют их новыми членами. как правило, проще.

1 голос
/ 16 октября 2019

enum - логическая группировка ваших констант. Допустим, вы хотите использовать другой цвет. Затем вы делаете перечисление цветов состоящим из всех определенных значений цветов. Допустим, accountType , которые состоят из значений текущего, сберегательного, ссудного, периодического. Его логическая группировка. Константа вы можете определить для чего угодно.

Теперь вы должны убедиться, что ваше имя enum имеет какое-либо отношение к логической группировке?

В вашем случае Enum имя равно LocalStorage, но значения внизу не соответствуют enum

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...