A menudo me gusta decir que JS no es mi lengua materna y eso me llevó a esta pregunta.
import Dropzone from "dropzone"; let myDropzone = Dropzone({ paramName: "file", // The name that will be used to transfer the file maxFilesize: 2, // MB accept: function(file, done) { if (file.name == "justinbieber.jpg") { done("Naha, you don't."); } else { done(); } } });El código anterior es del sitio web de Dropzone sobre su excelente herramienta de carga de archivos.
El else done() me confunde. ¿Cómo sabrías que es una función si estuvieras llamando a esto? Hacer deporte parece ser un parámetro para mí. Si estoy usando un buen IDE, ¿se me dirigirá como tal? Si no, ¿cómo lo sé?
En Javascript, cada función es un objeto y se puede usar como un objeto.
Puedes llamar
console.log(typeof done)para ver que el parámetro es una función.
JS usa el tipo de pato, lo que en este caso significa que el valor de done se verifica justo antes de intentar llamarlo. Si es exigible, todo está bien. Si no, se lanza un error en tiempo de ejecución .
En cuanto a si su IDE le informará sobre esto, eso dependerá de qué tan bueno sea su IDE para hacer verificaciones de tipos estáticos, pero supongo que no es una característica común. La tipificación pato es muy permisiva, por lo que generalmente es difícil determinar si algún código generará un error sin ejecutarlo.