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

TypeScript如何约束异步函数参数为指定对象键名并获得智能提示

问题原因

你遇到报错有两个核心原因:

  • Actions是运行时变量,不能直接用keyof取键类型,需要先用typeof提取它的TypeScript类型
  • TS默认对普通对象的键推导为宽泛的string类型,而非你期望的"action1" | "action2" | "action3"字面量联合类型,无法完成精准约束

实现方案

  1. 给Actions对象添加as const断言,锁定对象结构和键的字面量类型:
const Actions = {
  action1: {id: 1,name: "AD",points: 0},
  action2: {id: 3,name: "AD",points: 0},
  action3: {id: 4,name: "AD",points: 0},
} as const;
  1. 提取Actions的键联合类型,作为参数的约束类型:
// 得到的类型为:"action1" | "action2" | "action3"
type ActionKey = keyof typeof Actions;
  1. 给异步函数的入参添加类型标注:
// 第二个参数的类型你可以根据自己的业务需求替换成对应类型
const doSomething = async (action: ActionKey, value: unknown) => {
  // 业务逻辑实现
}

最终效果

配置完成后,调用doSomething输入第一个参数时,编辑器会自动弹出action1/action2/action3的智能提示,输入不符合要求的字符串会直接抛出类型错误。

内容的提问来源于stack exchange,提问作者helloworld

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 19:54:02