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

Jᴀʏ*_*Mᴇᴇ 5 parameters enums types typescript

我有一个功能:

public doSomethingWithEnum(enumType) {
   // Iterate over enum keys with Object.keys(enumType)
}
Run Code Online (Sandbox Code Playgroud)

我可以像这样使用它:

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

doSomethingWithEnum(MyEnum);
Run Code Online (Sandbox Code Playgroud)

很好,它有效。问题是我想要该参数的类型,以便我可以向它传递任何枚举。目前,:any我认为这也可能过于开放。

有什么方法可以限制/指定该参数的类型吗?

我尝试过的

我知道可以通过列出已知类型来限制这一点,例如:

doSomethingWithEnum(enumType: MyEnum | MyOtherEnum)
Run Code Online (Sandbox Code Playgroud)

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

Nic*_*wer 3

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

enum Example {
    foo,
    bar
};

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

doSomethingWithEnum(Example);
Run Code Online (Sandbox Code Playgroud)

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

  • 感谢您的回答尼古拉斯!我刚刚尝试过,但出现以下错误:“类型为‘typeof ExampleEnum’的参数不可分配给类型为‘Record&lt;string, string&gt;’的参数”。类型“typeof ExampleEnum”中缺少索引签名。` (2认同)