Javascript Typescript通用返回值推断问题 我不确定这是TS中的bug,还是他们认为不支持的特性。MVE: interface ColumnOptions<R> { valueFormatter(params: R): string; valueGetter(params: string): R; } const getColumn = function<R>(options: ColumnOptions<R>) {}; getColumn({ valueFormatter: params => 'hello', valueGetter: params => ({ nr: 1, str: 'hello', }), });
它正确地推断了R。这就是为什么我认为它可能是TS中的一个bug,但可能它只是不受支持,如果是这样的话,我不想在GitHub上打开一个问题。根据我的理解,您的代码使用TS 3.8、3.7、3.5和3.0进行了测试,创建了一个循环Javascript Typescript通用返回值推断问题 我不确定这是TS中的bug,还是他们认为不支持的特性。MVE: interface ColumnOptions<R> { valueFormatter(params: R): string; valueGetter(params: string): R; } const getColumn = function<R>(options: ColumnOptions<R>) {}; getColumn({ valueFormatter: params => 'hello', valueGetter: params => ({ nr: 1, str: 'hello', }), });,javascript,typescript,type-inference,Javascript,Typescript,Type Inference,它正确地推断了R。这就是为什么我认为它可能是TS中的一个bug,但可能它只是不受支持,如果是这样的话,我不想在GitHub上打开一个问题。根据我的理解,您的代码使用TS 3.8、3.7、3.5和3.0进行了测试,创建了一个循环 R可以从其中一个函数中推断为实体实例类型,然后作为参考来推断另一个函数的函数签名(如果它不完整或未知) 但要使其工作,您需要首先提供至少一种实体类型,以打破圆圈。这就是从valueGetter中删除param时发生的情况,因为您取消了TS推断参数类型的请求,从而将valu
R
可以从其中一个函数中推断为实体实例类型,然后作为参考来推断另一个函数的函数签名(如果它不完整或未知)
但要使其工作,您需要首先提供至少一种实体类型,以打破圆圈。这就是从valueGetter
中删除param
时发生的情况,因为您取消了TS推断参数类型的请求,从而将valueGetter
函数呈现为完整的实体类型。因此,返回类型可以用作R
的推断类型
如果为params:string
getColumn({
valueFormatter: params => 'hello',
valueGetter: (params: string) => ({
nr: 1,
str: 'hello',
}),
});
我认为在第一种情况下,
params
是any
,因此valueGetter(params:string):R
与valueGetter(params:any)不匹配:推断
如果我没有显式键入valueGetter
声明,它会从columnpoptions
getColumn({
valueFormatter: params => 'hello',
valueGetter: (params: string) => ({
nr: 1,
str: 'hello',
}),
});