Typescript 是否可以使用通用记录键?

Typescript 是否可以使用通用记录键?,typescript,Typescript,是否可以返回带有通用密钥的记录?键入允许它,但实现似乎不可能 函数foo(键:K):记录{ 返回{ [键]:“foo” } } 错误: 类型“{[x:string]:string;}”不能分配给类型“Record”。(2322) 快速修复方法是断言返回的对象是正确的类型 function foo<K extends string>(key: K): Record<K, string> { return { [key]: "foo&quo

是否可以返回带有通用密钥的记录?键入允许它,但实现似乎不可能

函数foo(键:K):记录{
返回{
[键]:“foo”
}
}
错误:

类型“{[x:string]:string;}”不能分配给类型“Record”。(2322)


快速修复方法是断言返回的对象是正确的类型

function foo<K extends string>(key: K): Record<K, string> {
    return {
        [key]: "foo"
    } as Record<K, string>
}
函数foo(键:K):记录{
返回{
[键]:“foo”
}记录在案
}
之所以需要这样做,是因为typescript承认类型
K
可能比文字字符串
更宽(
K
可能是
字符串
或字符串文字的并集)。如果是这种情况,那么返回的对象实际上不会满足返回类型,因为它不会为每个键
K
都有一个值


目前不可能声明泛型必须是单个文本字符串,因此需要像那样对
进行一些精细处理。

进入这个特定的兔子洞很有趣,就像可能一样。这是他们考虑过的,提到过的(比如
Unionize
类型),但我猜它从未在任何地方出现过。