在下面的代码片段中,我已经声明了一个IMath接口并在add方法中实现并且它可以工作,这绝对没问题。
但是,在multiply方法中它应该给出编译错误,因为我只传递一个参数而第二个参数不是可选的。
interface IMath {
(a: number, b: number): number;
}
// using the interface
var add: IMath;
add = function (a: number, b: number) {
return a + b;
}
var sum = add(5, 3);
alert(sum);
var multiply: IMath;
multiply = function (c: number) {
return c;
}
var result = multiply(5, 3);
alert(result);
但我在Visual Studio中没有得到任何编译错误,有什么猜测吗?
答案 0 :(得分:2)
这是因为(number) -> number
类型的函数可以分配给(number, number) -> number
类型。只是第二个参数被忽略并丢弃,但这并不意味着你不能用两个参数调用它,使赋值有效。
请参阅以下显示有效分配的最小示例:
var f: (a: number, b:number) => number = function (a:number):number {
return 0;
}
f(1, 2);