typescript - 在 typescript 中将枚举类型作为参数传递

标签 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)

但我需要它比这更具可扩展性,我不想每次不同的消费者需要调用该服务时都必须附加一个类型。

最佳答案

枚举基本上是具有键/值对的对象,其中值是字符串或数字。所以如果你想创建一个函数来接受任何枚举,你可以这样做:

enum Example {
    foo,
    bar
};

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

doSomethingWithEnum(Example);

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

关于typescript - 在 typescript 中将枚举类型作为参数传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60620175/

相关文章:

Swift:枚举协议(protocol)不起作用

javascript - typescript 错误: Property 'scrollIntoView' does not exist on type 'never' . TS2339

typescript - 推断对象数组中特定键的值

pointers - 通用访问类型 Ada

java - 我可以在模板排序中使用简单类型吗

python - 将组合的 IntFlag 分解为其单独的标志

javascript - angular2 - 单击后清除输入字段值

angular - 在 Jasmine 中对 MatDialog 进行单元测试时无法读取未定义的属性 'afterClosed'

c++ - 为什么 C++ 的 64 位整数扩展名为 "long long"?

c# - 如何在这种情况下传递枚举