在打字稿中将枚举类型作为参数传递

时间:2020-03-10 14:55:05

标签: typescript types enums parameters

我有一个功能:

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 个答案:

答案 0 :(得分:2)

枚举基本上是具有键/值对的对象,其中值可以是字符串或数字。因此,如果要创建一个可以接受任何枚举的函数,则可以执行以下操作:

enum Example {
    foo,
    bar
};

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

doSomethingWithEnum(Example);

这确实意味着您可以构造一个以字符串/数字为键的非枚举对象,并将其也传递给它。