L'interface garantit que tous les appelants des fonctions qui mettent en œuvre l'interface fournissent les arguments requis - data
y toUpper
.
Comme TypeScript comprend que JavaScript ne voit pas d'inconvénient à ce que vous transmettiez des arguments qui ne sont pas utilisés, il l'autorise intelligemment dans les implémentations.
Pourquoi cela est-il acceptable ? Parce que cela signifie que vous pouvez substituer n'importe quelle implémentation de l'interface sans affecter le code d'appel.
Exemple : Vous pouvez remplacer l'un ou l'autre des éléments suivants IFormatter
et le code fonctionne.
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);
Si TypeScript ne le faisait pas, votre upperCaseFormatter
devrait avoir un paramètre appelé toUpper
qui n'a été utilisé nulle part dans la fonction - ce qui rend le code moins lisible.