我有一个映射类型定义为
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>'.
我做错了什么?
我认为打字稿中的所有键在对象创建过程中都会扩展为
string
、number
或 symbol
。我不太了解细节或基本运作方式。可能有一些奇特的解决方法,但不确定,但根据我的经验,在这种情况下,只需将 return 转换为 ObjectWithHi<T>
是获得所需结果的最简单方法。