【发布时间】:2021-11-16 11:47:01
【问题描述】:
举个例子:
type A<Keys extends string, Prefix extends string> =
{[K in Keys]: `${Prefix}-${K}`}
function noGood<K extends string, Prefix extends string>(
obj: A<K, Prefix>, prefix: Prefix
) {
// ...
}
const test: A<'one' | 'two', 'prefix'> = {"one": 'prefix-one', "two": 'prefix-two'}
noGood(test, 'desired to only be "prefix", but can be any string...')
您可以看到 noGood 的泛型类型是从第一个参数 (obj) 推断出来的。然后,当您向第二个参数提供字符串时 (prefix)
显然,您可以输入您对noGood 的调用,它会禁止第二个参数使用该随机字符串,但理想情况下您不必这样做。
编辑: 问题不清楚。
澄清一下,问题是当您推断noGood 的参数时,Prefix 推断无法按预期工作(但不一定是意外),因为将Prefix 约束到obj 的通用 Prefix(第一个参数)。
在此示例中,Prefix(通用)实际上是 'prefix',并且希望只允许 noGood 推断出的第二个参数。但是,当您调用 noGood(obj, 'diff-prefix') 时,Prefix 泛型变为 'prefix' | 'diff-prefix',理想情况下,它将被限制为从 obj 推断的类型,而不是从第一个和第二个参数的并集推断的类型。
希望能解决问题。肯定可以看出它是如何不清楚的。
【问题讨论】:
标签: typescript generics typescript-generics