我写了一个函数,返回给定枚举的所有值作为数组。实现是有效的,但是我遇到了返回值类型的问题。
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);
我遇到了这个错误:
Error:(46, 7) TS2322: 类型 '(typeof Foo)[]' 不能赋值给类型 'Foo[]'. 类型 'typeof Foo' 不能赋值给类型 'Foo'。
我该如何更改 getEnumValues()
的签名以便在此处返回类型为 Foo[]
?
e:any
,这样也可以工作。 - Marcoany
并使其正常运行。使用 TypeScript 的技巧在于永远不要使用any
:P。此外,如果你使用e:any
,你还需要提供一个类型参数来正确地声明枚举类型(例如getEnumValues<Foo>(Foo)
,这样就可以推断出枚举类型了)。 - Titian Cernicova-Dragomir