TypeScript从参数枚举值推断函数返回类型

TypeScript从参数枚举值推断函数返回类型,typescript,enums,type-inference,return-type,Typescript,Enums,Type Inference,Return Type,我使用此函数将枚举转换为一个对象,该对象的属性具有枚举值,其值具有空选项列表: export const createDictOfEmptyOptionListsFromEnum = ( enum: Record<string | number, string | number> ) => { type OutputEntry = [number | string, Option[]]; const enumValues = Object.values(enum

我使用此函数将枚举转换为一个对象,该对象的属性具有枚举值,其值具有空选项列表:

export const createDictOfEmptyOptionListsFromEnum = ( 
  enum: Record<string | number, string | number>
) => {
  type OutputEntry = [number | string, Option[]];

  const enumValues = Object.values(enum);
  const entries = enumValues.map((val): OutputEntry => [val, []]);
  return Object.fromEntries(entries);
};
有办法去吗

  • 使Typescript自动推断缩小的返回类型或
  • 至少创建一个泛型类型,当提供枚举时,该泛型类型将返回缩小的输入类型

  • 对于初学者来说,
    createDictOfEmptyOptionListsFromEnum=什么是
    MyEnum
    以及如何将
    string | number
    转换为
    MyEnum
    s?事实上,我意识到我的建议行不通,因为您将枚举值用作结果对象的键。这可能会导致一些很难追踪到的错误,因为您很容易在结果对象中找到重复的键。@AluanHaddad存在
    outpuntery
    类型,因为否则TS会推断条目为
    [string | number | any[]][/code>。@AluanHaddad我成功地在函数返回时断言了该类型,根据您在第一条注释中的建议(
    将Object.fromEntries(entries)返回为{[k in E[keyof E]]:Option[];}
    )。如果你愿意的话,我会接受你的回答。非常感谢。
    type MyEnumOptionDict = { [k in MyEnum]: Option[] };
    const dict: MyEnumOptionDict = createEmptyOptionDict(MyEnum);