TypeScript中能否将enum枚举作为泛型参数传入自定义type?
问题结论
你完全可以将enum作为泛型参数传入自定义type,报错是因为你没有给泛型T添加符合Record参数要求的类型约束。
报错原因
TS内置的Record工具类型,第一个类型参数要求必须是可作为对象键的类型,也就是string | number | symbol的子类型。你定义泛型T时没有加任何约束,TS无法保证你传入的所有T都满足Record的参数要求,因此抛出类型错误。
修正后的代码
enum A { a = 'a', b = 'b', } // 给泛型T添加 extends 约束,默认值保持为A即可 type B<T extends string | number | symbol = A> = { values: Record<T, string>; }
使用示例
// 传入枚举作为泛型参数,符合类型要求 const someVar: B<A> = { values: { [A.a]: "a的对应值", [A.b]: "b的对应值" } }
内容的提问来源于stack exchange,提问作者underfrankenwood
相关产品推荐
相关产品推荐

