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通用返回值推断问题 我不确定这是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。这就是为什么我认为它可能是TS中的一个bug,但可能它只是不受支持,如果是这样的话,我不想在GitHub上打开一个问题。根据我的理解,您的代码使用TS 3.8、3.7、3.5和3.0进行了测试,创建了一个循环

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',
  }),
});