ventaja usar relleno las lambdas gruesas funciones flechas flecha ecma6 cuál cuando con azul typescript

typescript - usar - lambdas en javascript



¿Cuál es la sintaxis para las funciones de flecha de Typecript con genéricos? (6)

El manual mecanografiado actualmente no tiene nada sobre las funciones de flecha. Las funciones normales se pueden escribir genéricamente con esta sintaxis: ejemplo:

function identity<T>(arg: T): T { return arg; }

¿Cuál es la sintaxis para las funciones de flecha?


El ejemplo anterior me pareció confuso. Estoy usando React y JSX, así que creo que complicó el escenario.

Recibí una aclaración de TypeScript Deep Dive , que establece los genéricos de flecha:

Solución alternativa: el uso se extiende en el parámetro genérico para insinuar al compilador que es genérico, esto vino de un ejemplo más simple que me ayudó.

const identity = < T extends {} >(arg: T): T => { return arg; }


El ejemplo completo que explica la sintaxis a la que hace referencia Robin ... me lo trajo a casa:

Funciones genéricas

Algo como lo siguiente funciona bien:

function foo<T>(x: T): T { return x; }

Sin embargo, el uso de una función genérica de flecha no:

const foo = <T>(x: T) => x; // ERROR : unclosed `T` tag

Solución alternativa: el uso se extiende en el parámetro genérico para indicar al compilador que es genérico, por ejemplo:

const foo = <T extends {}>(x: T) => x;


Esto funciona para mi

const foo = <T, >(x: T) => x;


La especificación del lenguaje dice en p.64f

Una construcción de la forma <T> (...) => {...} podría analizarse como una expresión de función de flecha con un parámetro de tipo o una aserción de tipo aplicada a una función de flecha sin parámetro de tipo. Se resuelve como el anterior [..]

ejemplo:

// helper function needed because Backbone-couchdb''s sync does not return a jqxhr let fetched = < R extends Backbone.Collection<any> >(c:R) => { return new Promise(function (fulfill, reject) { c.fetch({reset: true, success: fulfill, error: reject}) }); };


Si bien la respuesta popular con extends {} funciona y es mejor que extends any , obliga a la T a ser un objeto

const foo = <T extends {}>(x: T) => x;

para evitar esto y preservar la seguridad de tipos, puede usar extends unknown lugar

const foo = <T extends unknown>(x: T) => x;


Si está en un archivo .tsx , no puede simplemente escribir <T> , pero esto funciona:

const Generic = <T> (value: T) => { return value; }

A diferencia del hack extends {} , este hack conserva al menos la intención.