arayüzü arabirimini uygulamak fonksiyonların tüm Arayanların gerekli argümanları tedarik sağlar.
TypeScript, kullanılmayan argümanları iletirseniz JavaScript'in işe yaramadığını anladığından, bu uygulamalarda akıllıca izin verir.
Bu neden sorun değil? Çünkü, aramanın herhangi bir uygulamasını çağrı kodunu etkilemeden değiştirebilirsin.
Örnek: IFormatter
uygulamasının yerini alabilir ve kod çalışır. Kod az okunabilir hale getirir - typescript bunu yapmadı Eğer
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);
, sizin upperCaseFormatter
fonksiyonunda herhangi bir yerinde kullanılmamıştır toUpper
adında bir parametreyi olması gerekir.
Fakat sonra 'upperCaseFormatter' işlevinin gereksiz bir boole değeri vardır:' upperCaseFormatter ("test", true); // 'true' dışında bir derleyici uyarısıyla sonuçlanır. Bunun yerine arabirim yanlıştır ve şöyle olmalıdır: 'interface IFormatter {(data: string, toUpper?: Bool): string; } 'Ancak bu,' variableCaseFormatter' işlevini '' variCaseFormatter ('test') ile '' toUpper '' i belirtmeden, işlev imzasında olmasına rağmen çağırmanız anlamına gelir. Şu anki karışıklığımın daha basit bir örneği için buradaki soruma bakın: http://stackoverflow.com/questions/23305020 – AJP
@AJP Eğer temiz kod yazıyorsanız, hiçbir zaman değişken bir durum biçimlendirici yazmazsınız. Üst ve bir alt için bir sınıf yazıp, kötü boole argümanını tamamen önlersiniz. – Fenton
@AJP Eğer 'upperCaseFormatter' dediğiniz durumda doğrudan arabirim alakasız. –