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
类型),但我猜它从未在任何地方出现过。