TypeScript:如何为接受枚举键的函数参数定义类型
解决方法:为枚举键定义函数参数类型
这个需求在TypeScript里很好实现,核心就是用keyof和typeof组合来提取枚举的键类型,我给你具体演示:
第一步:先看你的枚举定义
假设你的枚举是这样的数字枚举(如果是字符串枚举也适用,后面会说):
enum Methods { GET = 0, POST = 2, DELETE = 1, }
第二步:定义函数参数的类型
我们需要让函数参数只能接受Methods枚举的键(也就是"GET"、"POST"、"DELETE"),这里用keyof typeof Methods就能得到这些键的联合类型,它等价于"GET" | "POST" | "DELETE"。
然后函数可以这么写:
function getMethodPriority(method: keyof typeof Methods): number { // 直接通过键获取枚举对应的值,也就是你要的优先级 return Methods[method]; }
第三步:验证调用效果
现在调用的时候,TypeScript会自动做类型校验:
- 合法调用:
getMethodPriority("DELETE")→ 返回1,完全符合你的需求 - 如果传入不存在的键,比如
getMethodPriority("PUT"),TypeScript会直接报错,帮你避免错误
字符串枚举的情况
如果你的枚举是字符串枚举,用法也是一样的:
enum Methods { GET = "GET_METHOD", POST = "POST_METHOD", DELETE = "DELETE_METHOD", } // 同样用keyof typeof Methods作为参数类型 function getMethodPriority(method: keyof typeof Methods): number { // 这里可以自定义优先级映射 const priorityMap = { GET: 0, POST: 2, DELETE: 1, }; return priorityMap[method]; } // 调用示例 getMethodPriority("DELETE"); // 返回1
这样定义类型后,不仅能保证参数的合法性,还能在编辑器里获得代码提示,非常方便。
内容的提问来源于stack exchange,提问作者Emilios1995
相关产品推荐
相关产品推荐

