如何在 Typescript 中声明字符串键值的常量对象?

问题描述 投票:0回答:1

我有这个物体:

export const myObj = {
 a: 'someval',
 b: 'someotherval',
 c: 'asdasdasd'
};

然后我用这样的:

const myVar:string = myObj[someOtherVar];

使用 Typescript 执行此操作的正确方法是什么?

typescript
1个回答
0
投票

不确定这是否回答了你的问题,但我会这样做:

export const myObj = {
 a: 'someval',
 b: 'someotherval',
 c: 'asdasdasd'
} as const satisfies Record<string, string>

const myVar = myObj[someOtherVar as keyof typeof myObj]

这种方法的主要问题是打字稿认为访问对象的结果永远不会是

undefined
(由于类型转换),这是错误的。所以我喜欢使用这样的辅助函数:

type MyObj = typeof myObj

function getFromMyObj<T extends keyof MyObj>(key: T): MyObj[T]
function getFromMyObj<T extends string>(key: T): MyObj[keyof MyObj] | undefined
function getFromMyObj<T extends string>(key: T): MyObj[keyof MyObj] | undefined {
  return myObj[key as keyof MyObj]
}

// Example usage
const a = getFromMyObj('a') // type: 'someval'
const fromStringVar = getFromMyObj(someOtherVar) // type: 'someval' | 'someotherval' | 'asdasdasd' | undefined

如果您需要使用更多常量来执行此操作,您可以将此函数进一步抽象为一个高阶函数,给定一个对象返回 get 函数。

在这里尝试一下

© www.soinside.com 2019 - 2024. All rights reserved.