interface - teclado - mecanografia ejercicios
Interfaz de función de mecanografía (1)
La interfaz garantiza que todos los llamantes de las funciones que implementan la interfaz proporcionen los argumentos necesarios: data
y toUpper
.
Dado que TypeScript comprende que a JavaScript no le importa si pasa argumentos que no se utilizan, esto lo permite hábilmente en las implementaciones.
¿Por qué está bien? Porque significa que puede sustituir cualquier implementación de la interfaz sin afectar el código de llamada.
Ejemplo: puede sustituir la implementación IFormatter
y el código funciona.
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);
Si TypeScript no hiciera esto, su upperCaseFormatter
tendría que tener un parámetro llamado toUpper
que no se usara en ninguna parte de la función, lo que hace que el código sea menos legible.
¿Por qué Typescript no me advierte que la función que estoy definiendo no coincide con la declaración de interfaz, pero sí me avisa si intento invocar la función?
interface IFormatter {
(data: string, toUpper : boolean): string;
};
//Compiler does not flag error here.
var upperCaseFormatter: IFormatter = function (data: string) {
return data.toUpperCase();
}
upperCaseFormatter("test"); //but does flag an error here.