如何返回具有通用映射类型的对象?

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

我有一个映射类型定义为

type FooOrBar =  "foo" | "bar"

type ObjectWithHi<T extends FooOrBar> = {
        [key in T]: 'hi';
}

然后我想要一个像这样的函数调用

getFooOrBar<'foo'>('foo')

我尝试将我的函数定义为

function getFooOrBar<T extends FooOrBar>(fooOrBar: T): ObjectWithHi<T> {
    return {
        [fooOrBar]: 'hi',
    }
}

但是 TypeScript 抱怨

Type '{ [x: string]: string; }' is not assignable to type 'ObjectWithHi<T>'.

我做错了什么?

typescript
1个回答
0
投票

我认为打字稿中的所有键在对象创建过程中都会扩展为

string
number
symbol
。我不太了解细节或基本运作方式。可能有一些奇特的解决方法,但不确定,但根据我的经验,在这种情况下,只需将 return 转换为
ObjectWithHi<T>
是获得所需结果的最简单方法。

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