Die Schnittstelle stellt sicher, dass alle Aufrufer von Funktionen, die die Schnittstelle implementieren, die erforderlichen Argumente liefern - dataund toUpper.
Da TypeScript versteht, dass JavaScript nichts dagegen hat, wenn Sie Argumente übergeben, die nicht verwendet werden, lässt dies dies in Implementierungen geschickt zu.
Warum ist das in Ordnung? Weil dies bedeutet, dass Sie jede Implementierung der Schnittstelle ersetzen können, ohne den aufrufenden Code zu beeinflussen.
Beispiel: Sie können jede IFormatterImplementierung ersetzen und der Code funktioniert.
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();
}
var formatter = variableCaseFormatter;
formatter("test", true);
Wenn TypeScript dies nicht tun upperCaseFormatterwürde , müsste ein Parameter namens aufgerufen werden toUpper, der an keiner Stelle in der Funktion verwendet wird - wodurch der Code weniger lesbar wird.
upperCaseFormattereinen redundanten booleschen Wert :upperCaseFormatter("test", true); // excluding the 'true' will result in a compiler warning. Stattdessen ist die Schnittstelle falsch und sollte sein:interface IFormatter { (data: string, toUpper? : bool): string; }Dies bedeutet dann aber, dass SievariableCaseFormattermit nurvariableCaseFormatter('test');ohne Angabe aufrufen können,toUpperobwohl sie in der Funktionssignatur enthalten ist. Siehe meine Frage hier für ein einfacheres Beispiel meiner aktuellen Verwirrung: stackoverflow.com/questions/23305020