Ответ 1
Интерфейс гарантирует, что все вызывающие функции, реализующие интерфейс, снабжают требуемыми аргументами - data
и toUpper
.
Поскольку TypeScript понимает, что JavaScript не против, если вы передаете аргументы, которые не используются, он ловко разрешает это в реализациях.
Почему все в порядке? Потому что это означает, что вы можете заменить любую реализацию интерфейса, не затрагивая код вызова.
Пример. Вы можете заменить либо реализацию IFormatter
, и код работает.
interface IFormatter {
(data: string, toUpper : bool): string;
};
var upperCaseFormatter: IFormatter = function (data: string) {
return data.toUpperCase();
}
var variableCaseFormatter: IFormatter = function (data: string, toUpper: bool) {
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
, который не использовался нигде в функции, что делает код менее читаемым.