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

2023-11-21

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

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:类型“(typeof Foo)[]”不可分配给类型 '富[]'。类型“typeof Foo”不可分配给类型“Foo”。

如何更改签名getEnumValues()为了返回类型Foo[] here?


您现在需要稍微更改一下定义来推断枚举成员的类型T将是枚举对象本身(又名typeof T)

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

function getEnumValues<TEnum, TKeys extends string>(e: { [key in TKeys]: TEnum }): TEnum[] {
    let keys = Object.keys(e) as Array<TKeys>;
    keys = keys.filter(key => e[key] !== undefined);
    return keys.map(key => e[key]);
}

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

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

TypeScript:从枚举类型推断枚举值类型 的相关文章

随机推荐