【问题标题】:How to return a specific type of object property in TypeScript?如何在 TypeScript 中返回特定类型的对象属性?
【发布时间】:2022-11-02 11:02:54
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: typescript object keyof


    【解决方案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');
    

    【讨论】:

    • 这是完美的工作。 as const 在这里做什么?
    • 它防止值被扩大,例如从flag: 'value 1' 到flag: string,允许使用更精确的类型。
    【解决方案2】:

    如果我有静态对象怎么办。

    Const localObj = {
     Key1 :"string text",
     Key2 :"string text so on"
    }
    
    
    Function getLocalThing(key:string)
    { 
    return localObj[key]
    }
    

    我们将如何在打字稿中编写函数。

    【讨论】:

      猜你喜欢
      • 2015-10-21
      • 2022-01-01
      • 2021-04-15
      • 1970-01-01
      • 2018-09-19
      • 2021-04-25
      • 1970-01-01
      • 2017-05-28
      • 2020-04-14
      相关资源
      最近更新 更多