83 votes

Interface des fonctions Typescript

Pourquoi Typescript ne m'avertit-il pas que la fonction que je définis ne correspond pas à la déclaration de l'interface, alors qu'il m'avertit si j'essaie d'invoquer la fonction.

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.

111voto

Steve Fenton Points 55265

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.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X