该接口确保实现该接口的函数的所有调用者都提供所需的参数-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
的参数,这个参数在函数中的任何地方都没有使用过——这会降低代码的可读性.