该接口确保实现该接口的所有函数调用者都提供所需的参数 -data
和toUpper
.
因为 TypeScript 知道 JavaScript 不介意您传递未使用的参数,所以它巧妙地在实现中允许这样做。
为什么这样可以?因为这意味着您可以替换接口的任何实现而不影响调用代码。
示例:您可以替换任IFormatter
一实现并且代码有效。
interface IFormatter {
(data: string, toUpper: boolean): string;
};
var upperCaseFormatter: IFormatter = function (data: string) {
return data.toUpperCase();
}
var variableCaseFormatter: IFormatter = function (data: string, toUpper: boolean) {
if (toUpper) {
return data.toUpperCase();
}
return data.toLowerCase();
}
// Switch between these at will
//var formatter = upperCaseFormatter;
var formatter = variableCaseFormatter;
formatter("test", true);
如果 TypeScript 不这样做,您upperCaseFormatter
将不得不调用toUpper
一个未在函数中的任何位置使用的参数——这会降低代码的可读性。