You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 09:08:27