Передача типа enum в качестве параметра в машинописи - PullRequest
1 голос
/ 10 марта 2020

У меня есть функция:

public doSomethingWithEnum(enumType) {
   // Iterate over enum keys with Object.keys(enumType)
}

И я могу использовать это так:

export enum MyEnum { SomeEnumValue = 'SomeEnumValue', SomeOtherValue = 'SomeOtherValue' }

doSomethingWithEnum(MyEnum);

Это нормально, это работает. Проблема в том, что мне нужен тип для этого параметра, чтобы я мог передать ему любое перечисление. На данный момент это может быть также :any, который, я думаю, слишком открыт.

Есть ли способ ограничения / указания типа этого параметра?

Что я пробовал

Я знаю, что можно ограничить это, перечислив известные типы, например:

doSomethingWithEnum(enumType: MyEnum | MyOtherEnum)

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

1 Ответ

2 голосов
/ 10 марта 2020

Перечисления - это в основном объекты с парами ключ / значение, где значением является либо строка, либо число. Поэтому, если вы хотите создать функцию, которая принимает буквально любое перечисление, вы можете сделать:

enum Example {
    foo,
    bar
};

const doSomethingWithEnum = (en: Record<string, string | number>) => {
    Object.keys(en).forEach(key => console.log(key));
}

doSomethingWithEnum(Example);

Это означает, что вы можете создать не перечислимый объект со строками / числами в качестве ключей и передать его тоже ,

...