为什么在TypeScript的接口代码下执行?

时间:2016-02-05 13:34:03

标签: typescript

在下面的代码片段中,我已经声明了一个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中没有得到任何编译错误,有什么猜测吗?

1 个答案:

答案 0 :(得分:2)

这是因为(number) -> number类型的函数可以分配给(number, number) -> number类型。只是第二个参数被忽略并丢弃,但这并不意味着你不能用两个参数调用它,使赋值有效。

请参阅以下显示有效分配的最小示例:

var f: (a: number, b:number) => number = function (a:number):number {
    return 0;
}
f(1, 2);