给出下面的代码,输入脚本编译器不会引发任何错误,所以它只是不检查函数的参数类型?
var mySearch3: (source: Person, subString: string)=> boolean =
function() {return true;}
Run Code Online (Sandbox Code Playgroud)
TypeScript 尊重您可以忽略传递的参数这一事实。
当您定义了一个函数时,任何实现都必须通过具有正确类型的参数或省略该参数来兼容。
调用函数时,您必须提供所有必需的参数(非可选且没有默认值的参数)。
让我们使用此接口来处理一些示例,该接口用于接受字符串和数字的函数:
interface Example {
(name: string, age: number) : string;
}
Run Code Online (Sandbox Code Playgroud)
以下所有功能均兼容:
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; };
Run Code Online (Sandbox Code Playgroud)
每一个都是兼容的,因为它要么指定了正确类型的参数,要么省略了它。关键是它们都必须以相同的方式调用。
我在调用这些函数时必须指定这两个参数,即使它们不使用它们。这允许函数更改其实现,而不会影响依赖公共契约(期望传递两个参数)的调用者。
a('Rod', 50);
b('Jane', 50);
c('Freddy', 50);
Run Code Online (Sandbox Code Playgroud)
现在让我们看看错误案例。
职能:
// The parameters are not compatible.
var d: Example = function(special: boolean) { return 'Hello';}
Run Code Online (Sandbox Code Playgroud)
函数调用:
// 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);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1717 次 |
| 最近记录: |