TypeScript 尊重您可以忽略传递的参数这一事实。
当您定义了函数时,任何实现都必须通过具有正确类型的参数或省略该参数来兼容。
调用函数时,必须提供所有必需的参数(非可选且没有默认值的参数)。
让我们使用此接口来处理一些示例,该接口用于接受字符串和数字的函数:
interface Example {
(name: string, age: number) : string;
}
以下所有功能都是兼容的:
var a: Example = function() { return 'Hello'; };
var b: Example = function(name: string) { return 'Hello ' + name; };
var c: Example = function(n: string, a: number) { return 'Hello ' + n + ' you are ' + a; };
每个参数都是兼容的,因为它要么指定正确类型的参数,要么省略它。这的关键是他们都必须以同样的方式被调用.
当我调用这些函数时,我必须指定这两个参数,即使它们不使用它们。这允许函数更改其实现,而不会影响依赖公共合约(期望传递两个参数)的调用者。
a('Rod', 50);
b('Jane', 50);
c('Freddy', 50);
现在让我们看看错误情况。
功能:
// The parameters are not compatible.
var d: Example = function(special: boolean) { return 'Hello';}
函数调用:
// You haven't passed the args
a();
a('Rod');
// Args are wrong type
a(50, 'Rod');
a('Rod', true);
// Too many args
a('Rod', 50, true);