Búsqueda de sitios web

javascript - ¿Cuál es la diferencia entre usar : y => para el tipo de retorno en una función de TypeScript?


Tengo el siguiente código:

///<reference path="../typescript/jquery.d.ts" />
function addThemePrototypes() {
    var templateSetup = new Array();
    $.fn.addTemplateSetup = function(func, prioritary)
    {
        if (prioritary)
        {
            templateSetup.unshift(func);
        }
        else
        {
            templateSetup.push(func);
        }
    };
}

¿Alguien puede decirme por qué esto debería declararse con => void ?

interface JQuery {
    addTemplateSetup: (func: Function, priority: bool) =>void;
}

Supongo que estoy un poco confundido sobre cómo hacer el tipo de retorno de una función de JavaScript. A veces veo : jQuery y ahora estoy viendo => void. ¿Cuál es la diferencia entre los dos?

Respuesta #1

En tu ejemplo, ambos se declaran usando dos puntos...

¡Vamos a partirlo por la mitad!

Sin la declaración de tipo...

interface JQuery {
    addTemplateSetup
}

La declaración de tipo...

: (func: Function, priority: bool) =>void;

Si usas la palabra is en lugar de los : es como decir

La propiedad llamada 'addTemplateSetUp': Una función que acepta dos parámetros de tipos específicos y no devuelve ningún valor

Aquí hay un ejemplo con dos interfaces que son en realidad idénticas, pero una usa => y la otra no. Ambas son tratadas de manera idéntica por TypeScript, por lo que realmente depende de la preferencia del desarrollador.

interface JQuery {
    addTemplateSetup: (func: Function, priority: bool) =>void;
}

interface Identical {
    addTemplateSetup(func: Function, priority: bool): void;
}

class ImplementsEither implements JQuery {
    addTemplateSetup (func: Function, priority: bool) : void {

    }
}

Podrías usar la declaración de estilo => si te gusta que lea casi en inglés.

Podrías usar el segundo estilo si quieres que tus interfaces se vean más como se verán las implementaciones.

Respuesta #2

Es información sobre lo que devuelve la función. ¿Devuelve un objeto jQuery (con la interfaz de jQuery) o es una función void que no devuelve nada?

$("#someId").addTemplateSetup();

En tu ejemplo no devuelves nada, así que "void" sería correcto. Pero si devolvieras "this" en su lugar en tu función de JavaScript, como es bastante común, para mantener la encadenabilidad de jQuery, deberías declararlo como que devuelve => JQuery;

$("#someId").addTemplateSetup().Show();

Artículos relacionados