我有方法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'。
好吧,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));
如果您正在尝试做其他事情,请提供更多信息。希望有所帮助;祝好运!