我有这个物体:
export const myObj = {
a: 'someval',
b: 'someotherval',
c: 'asdasdasd'
};
然后我用这样的:
const myVar:string = myObj[someOtherVar];
使用 Typescript 执行此操作的正确方法是什么?
不确定这是否回答了你的问题,但我会这样做:
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 函数。