0

假设我在一个对象中有一个标志列表,如下所示:

type Flags = {
  flag1: string,
  flag2: string,
  flag3: boolean,
  flag4: number
}

// const myFlags: Flags = {
//   flag1: 'value 1',
//   flag2: 'value 1',
//   flag3: true,
//   flag4: 12
// }

我想编写一个getFlag如下所示的函数:

function getFlag(flag: keyof Flags): any { 
   // return myFlags[flag]
}

我怎样才能返回被调用any的标志类型,而不是返回?getFlag

(为了使这可能更容易,我们可以将标志类型限制为boolean,stringnumber,但不是返回boolean | string | number,我仍然想获取特定的属性类型)

4

1 回答 1

1

使函数通用,以便传入的字符串的类型可用于查找对象上值的关联类型。

function getFlag<T extends keyof Flags>(flag: T) { 
   return myFlags[flag]
}
const result = getFlag('flag1');

您可以更进一步,使用 . 返回确切的类型as const

 const myFlags = {
   flag1: 'value 1',
   flag2: 'value 1',
   flag3: true,
   flag4: 12
 } as const;

function getFlag<T extends keyof typeof myFlags>(flag: T) { 
   return myFlags[flag]
}
const result = getFlag('flag1');
于 2022-02-02T04:26:26.730 回答