TypeScript:从枚举类型中推断枚举值类型

时间:2018-05-08 06:27:29

标签: typescript generics enums type-inference

我编写了一个函数,将给定枚举的所有值都作为数组返回。实现有效,但我对返回值的类型有疑问。

enum Foo {
    FOO_1 = "FOO_1",
    FOO_2 = "FOO_2",
}

function getEnumValues<T>(e:T): T[] {
    let keys: string[] = Object.keys(e);
    keys = keys.filter(key => e[key] !== undefined);
    return keys.map(key => e[key]);
}

const fooValues:Foo[] = getEnumValues(Foo);

我收到此错误:

  

错误:(46,7)TS2322:输入&#39;(typeof Foo)[]&#39;不能分配给类型   &#39;富[]&#39 ;.输入&#39;类型的Foo&#39;不能分配给&#39; Foo&#39;。

如何更改getEnumValues()的签名才能在此处返回Foo[]类型?

1 个答案:

答案 0 :(得分:4)

您需要稍微更改定义以推断枚举成员的类型,现在$('#collapseDiv').removeClass('show'); 将是枚举对象本身(又名T

typeof T

请注意,虽然这适用于枚举,但它适用于任何不限于枚举的对象