如何在 TypeScript 中 return 特定类型的对象 属性?

How to return a specific type of object property in TypeScript?

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

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]
}

而不是 returning any,我如何 return 调用 getFlag 的标志类型?

(为了使这更容易,我们可以将标志类型限制为 booleanstringnumber,而不是 return ing boolean | string | number,我还是想得到具体的属性类型)

将函数设为泛型,以便传入的字符串类型可用于查找对象值的关联类型。

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

您可以更进一步 return 使用 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');