Ce tapuscrit compile bien:Comment puis-je obtenir la sécurité de type pour les fonctions renvoyées dans TypeScript?
abstract class Animal {
/*
Any extension of Animal MUST have a function which returns
another function that has exactly the signature (string): void
*/
abstract getPlayBehavior(): (toy: string) => void;
}
class Cat extends Animal {
/*
Clearly does not have a function which returns a function
that has the correct signature. This function returns a function with
the signature (void) : void
*/
getPlayBehavior() {
return() => {
console.log(`Play with toy_var_would_go_here!`);
};
}
}
class Program {
static main() {
let cat: Animal = new Cat();
cat.getPlayBehavior()("Toy");
}
}
Program.main();
J'attends une erreur parce que la classe Cat ne met pas en œuvre certainement la classe abstraite des animaux correctement. Je suppose que la classe Cat doit avoir une fonction qui renvoie une autre fonction de la signature exacte spécifiée dans la classe Animal abstraite.
L'exécution du code, je reçois:
> node index.js
> Play with toy_var_would_go_here!
Est-ce que je peux faire pour vous assurer que le compilateur applique ce genre de politique?
En JavaScript, une fonction nulle est une fonction unaire. Les arguments supplémentaires passés sont simplement ignorés. Ceci est commun dans, disons, la gestion des événements. Donc, votre fonction est de la bonne signature. –
@FengyangWang: Je ne suis pas en désaccord, sauf pour dire que TypeScript fait beaucoup de choses qui ne sont pas émises en JavaScript uniquement pour que la sécurité du type soit appliquée. Je suis juste curieux de savoir si je peux trouver un moyen de renforcer ce type de sécurité. –