インターフェイスは、インターフェイスを実装する関数のすべての呼び出し元が必要な引数(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
。これにより、コードが読みにくくなります。