在typescript中,如何从当前函数中第二个函数调用的参数类型推断参数类型

在typescript中,如何从当前函数中第二个函数调用的参数类型推断参数类型,typescript,Typescript,如果我有一个函数 const g = f => p => f(p) g(x => x + 3)(5) 如何键入“g”,以便从参数“5”推断x的类型?按照您描述它的方式,这是不可能的,因为您的工厂g可能会创建不同的函数,如const func=g(x=>x+3)可以用作func('asdad')//返回'asdad3'和func(5)//返回8。您无法通过这种方式从用法推断类型,因为用法的可能性是无穷的。您必须预先设置x的类型,从而决定它是func('asda')还是func(

如果我有一个函数

const g = f => p => f(p)
g(x => x + 3)(5)

如何键入“g”,以便从参数“5”推断x的类型?

按照您描述它的方式,这是不可能的,因为您的工厂
g
可能会创建不同的函数,如
const func=g(x=>x+3)
可以用作
func('asdad')//返回'asdad3'
func(5)//返回8
。您无法通过这种方式从用法推断类型,因为用法的可能性是无穷的。您必须预先设置
x
的类型,从而决定它是
func('asda')
还是
func(5)
按照您描述它的方式,这是不可能的,因为您的工厂
g
可能会创建不同的函数,如
const func=g(x=>x+3)
可以用作
func('asdad')//返回'asdad3'
func(5)//返回8
。您无法通过这种方式从用法推断类型,因为用法的可能性是无穷的。您必须预先设置
x
的类型,从而决定它是
func('asda')
还是
func(5)

我很确定您不能这样做。。是的,
g
的类型类似于
const g=(f:(x:t)=>U)=>(p:t)=>f(p)
但是
x=>x+3
给定的
5
中的
x
上下文类型可能超出了编译器的功能范围。从左到右和从早到晚的推断更可靠。我不知道typescript的实际实现,但“向后走”或“从右到左”听起来并不比“从左到右”困难多少,因为在将代码解析为ast后,您已经掌握了一切。我很确定您不能做到这一点。。是的,
g
的类型类似于
const g=(f:(x:t)=>U)=>(p:t)=>f(p)
但是
x=>x+3
给定的
5
中的
x
上下文类型可能超出了编译器的功能范围。从左到右和从早到晚的推断更可靠。我不知道typescript的实际实现,但“向后走”或“从右到左”听起来并不比“从左到右”困难多少,因为在将代码解析为ast后,您已经掌握了一切“你不能用这种方式从用法中推断类型,因为用法的可能性是无穷的,这正是我们需要typescript从使用情况“推断”类型的原因。在我们提供参数5或“asda”之前,当然typescript不能做任何事情,但只要它看到它,就很清楚它是什么类型。所以对我来说,这只是typescript中缺少的一个特性“你不能用这种方式从使用中推断类型,因为使用的可能性是无穷的”,这正是为什么我们需要typescript从使用中“推断”类型的原因。在我们提供参数5或“asda”之前,当然typescript不能做任何事情,但只要它看到它,就很清楚它是什么类型。所以对我来说,这只是typescript中缺少的功能