如何基于传入的数组参数推导Record的键并实现对应TypeScript类型定义
实现方案
直接通过TypeScript泛型约束入参类型,即可自动推导返回值的键类型,完整实现代码如下:
const createConstants = <T extends PropertyKey>(...keys: T[]): Record<T, T> => { const record = {} as Record<T, T>; keys.forEach(key => { record[key] = key; }); return record; };
说明
T extends PropertyKey是TypeScript内置的类型约束,限定入参只能是可作为对象键的类型(string/number/symbol),符合JS语法规则- 入参被推导为泛型
T的数组后,返回值Record<T, T>会自动生成键和值都匹配入参的类型结构,完全符合键值相等的需求 - 调用时不需要额外手动声明类型,TS会自动根据入参推导返回值类型
使用示例
const TODO_ACTIONS = createConstants('ADD_TODO', 'DELETE_TODO', 'TOGGLE_TODO'); // 自动推导类型为:Record<'ADD_TODO' | 'DELETE_TODO' | 'TOGGLE_TODO', 'ADD_TODO' | 'DELETE_TODO' | 'TOGGLE_TODO'> // 有完整的智能提示,访问不存在的属性会直接触发类型报错 console.log(TODO_ACTIONS.ADD_TODO) // 输出 'ADD_TODO',类型正确
内容的提问来源于stack exchange,提问作者carlesba
相关产品推荐
相关产品推荐

