打字稿:为什么没有参数的函数可以转换为带参数的函数

时间:2015-09-25 19:59:51

标签: javascript typescript

为什么此代码中没有任何编译错误? 代码:

function partial(f: (a: string) => string, a: string) : string {
  return "";
}

var test = () => "";
var result = partial(test, "");

功能"部分"将一个参数作为第一个参数,它接受一个参数,但是我传递给它的函数,它没有任何参数,而打字稿编译器认为,这是正常的。我知道这不会破坏任何东西,因为你可以将世界上的所有参数传递给不带任何参数的函数,并且它不会破坏任何东西,但它应该是编译错误,因为typescript是关于类型的,并且有明显的类型错配,它可能是开发人员的错误。

此问题是否有解决方法?

1 个答案:

答案 0 :(得分:2)

  

有明显的类型不匹配,可能是开发人员的错误。

这段代码没有明显的错误。考虑这样的事情:

let items = [1, 2, 3];
// Print each item in the array
items.forEach(item => console.log(item));

这段代码是否正确?非也!但forEach使用三个参数调用其提供的函数,而不是一个。写下来会很乏味:

items.forEach((item, unused1, unused2) => console.log(item));

请注意,如果您尝试执行实际上错误的操作,仍会出现错误。例如:

function printNumber(x: number) { console.log(x); }
let strings = ['hello', 'world'];
strings.forEach(printNumber); // Error, can't convert string to number