TypeScript如何约束异步函数参数为指定对象键名并获得智能提示
问题原因
你遇到报错有两个核心原因:
Actions是运行时变量,不能直接用keyof取键类型,需要先用typeof提取它的TypeScript类型- TS默认对普通对象的键推导为宽泛的
string类型,而非你期望的"action1" | "action2" | "action3"字面量联合类型,无法完成精准约束
实现方案
- 给
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;
- 提取Actions的键联合类型,作为参数的约束类型:
// 得到的类型为:"action1" | "action2" | "action3" type ActionKey = keyof typeof Actions;
- 给异步函数的入参添加类型标注:
// 第二个参数的类型你可以根据自己的业务需求替换成对应类型 const doSomething = async (action: ActionKey, value: unknown) => { // 业务逻辑实现 }
最终效果
配置完成后,调用doSomething输入第一个参数时,编辑器会自动弹出action1/action2/action3的智能提示,输入不符合要求的字符串会直接抛出类型错误。
内容的提问来源于stack exchange,提问作者helloworld
相关产品推荐
相关产品推荐

