如何将TypeScript枚举作为所有枚举的数组传递?

问题描述 投票:1回答:1

我有方法export const getMatchPicks = (match: IMatch, ends: EndType[]): IPick[] => ends.map(end => matchToPick(match, end));

另外,我有:

enum EndType {
    HOME = 'home',
    DRAW = 'draw',
    AWAY = 'away',
}

我的目标调用getMatchesPicksList函数将EndType枚举作为数组传递:

 getMatchesPicksList(matches, [EndType.HOME, EndType.AWAY, EndType.DRAW])

上面的代码已正确编译。但如果我有n长度枚举怎么办?如何将其传递给函数?

我期待像getMatchesPicksList(matches, EndType)这样的东西,但它会返回:

错误TS2345:类型'typeof EndType'的参数不能分配给'EndType []'类型的参数。 'typeof EndType'类型中缺少属性'includes'。

typescript enums
1个回答
1
投票

好吧,getMatchesPicksList()没有直接采用EndType枚举对象。它需要EndType枚举对象的一系列属性值。有点令人困惑的是,EndType引用了一个值(枚举对象)以及一个类型(字符串属性值,类似于union 'home' | 'draw' | 'away')。

如果要将字符串枚举对象转换为其属性值数组,可以创建一个函数来执行此操作:

function getStringEnumValues<E extends Record<keyof E, string>>(e: E): E[keyof E][] {
  return (Object.keys(e) as (keyof E)[]).map(k => e[k]);
}

然后在结果上调用您的函数:

getMatchesPicksList(matches, getStringEnumValues(EndType));

如果您正在尝试做其他事情,请提供更多信息。希望有所帮助;祝好运!

© www.soinside.com 2019 - 2024. All rights reserved.