我可以做一个lambda参数吗?
问题描述:
我想将一个lambda传递给一个函数,但需要一个具有一个参数的lambda。根据需要,TypeScript会抛出一个错误,如果我将两个参数传入lambda,但不会抱怨,如果我省略了lambda中的任何参数。我怎样才能让TypeScript需要传递一个参数lambda?我可以做一个lambda参数吗?
function foo(fn: (x) => any) { }
foo(() => "bla"); // Bad, but no error
foo((x) => "bla"); // Good, no error
foo((x, y) => "bla"); // Bad, with error
答
这实际上是预期的行为,无论好坏。请参阅https://github.com/Microsoft/TypeScript/wiki/FAQ#why-are-functions-with-fewer-parameters-assignable-to-functions-that-take-more-parameters
不幸的是,我不知道如何获得所需的行为。
答
你不能,语义,x => "bla"
和() => "bla"
完全一致。他们都完全忽略了第一个参数(以及所有其他参数)
通过询问(x) => any
lambda,您基本上会说:“我想要一些可以用一个参数调用的东西”,() => "bla"
符合法案,(x, y) => "bla"
不。
'()=>“bla”'可分配给'(x)=> any'。实际上,即使存在限制,它仍然不能强制使用该参数进行反对的函数。 – zerkms