Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Typescript:为什么不带参数的函数可以转换为带参数的函数_Javascript_Typescript - Fatal编程技术网

Javascript Typescript:为什么不带参数的函数可以转换为带参数的函数

Javascript Typescript:为什么不带参数的函数可以转换为带参数的函数,javascript,typescript,Javascript,Typescript,为什么这段代码中没有编译错误? 代码: 函数“partial”将函数作为第一个参数,它只接受一个参数,但我将函数传递给它,它不接受任何参数,typescript编译器认为这是可以的。我知道这不能破坏任何东西,因为您可以将世界上所有的参数传递给不接受任何参数的函数,它不会破坏任何东西,但这应该是一个编译错误,因为typescript是关于类型的,存在明显的类型错配,可能是开发人员的错误 这个问题有解决办法吗 存在明显的类型错误匹配,可能是开发人员的错误 这个代码没有明显的错误。考虑这样的事情: l

为什么这段代码中没有编译错误? 代码:

函数“partial”将函数作为第一个参数,它只接受一个参数,但我将函数传递给它,它不接受任何参数,typescript编译器认为这是可以的。我知道这不能破坏任何东西,因为您可以将世界上所有的参数传递给不接受任何参数的函数,它不会破坏任何东西,但这应该是一个编译错误,因为typescript是关于类型的,存在明显的类型错配,可能是开发人员的错误

这个问题有解决办法吗

存在明显的类型错误匹配,可能是开发人员的错误

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

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

也许我遗漏了一个术语步骤或什么(我不是一个typescript用户),但是一个有参数的函数和一个没有参数的函数不是都是函数吗?为什么会抛出类型错误?他们都是同一类型的。我不同意。如果您有一个函数可以接受1个参数,而一些重载可以接受2个或3个参数,那么您应该为所有原型创建类型。在我看来没有什么不同。例如,如果数组上的forEach方法可以将一个函数作为第一个参数,即一个参数、两个参数或三个参数,则应在键入中为其创建三个原型,以显示这三种可能性。这不会对任何函数的运行时行为建模
forEach
始终使用三个参数调用其参数;它不会检查回调的长度来决定调用它的参数数量。
function printNumber(x: number) { console.log(x); }
let strings = ['hello', 'world'];
strings.forEach(printNumber); // Error, can't convert string to number