Jolis Exemples de Code en TypeScript

1/2)

Introduction

Dans cette section, je vais essayer de collecter les petites fonctions un peu magiques et les bouts de code qui servent tout le temps et qui sont soit beaux soit dûrs à retrouver donc bons à centraliser.

2/2)

La fonction concatMap

C'est un problème très fréquent :
Vous avez une fonction qui renvoie soit des éléments simples soit des tableaux du même type d'éléments, et vous voulez l'appliquer à un tableau, bref appliquer Array.map mais avec une fonction qui peut renvoyer des tableaux.

Dans ce cas, on veut en général obtenir la concaténation des tableaux retournés.

Grâce au sucre syntactique d'ES6 la fonction s'écrit en une ligne que je trouve assez élégante. Bon OK je prends 3 lignes parce que je déteste les longues lignes de code, mais c'est concis.

Le point intéressant ici, est de voir comment on la type en TypeScript.

concatMap en TypeScript :
const concatMap = <T, U> (fn: (x: T) => U | U[]) =>
  (list: T[]): U[] =>
    ([] as U[]).concat(...list.map(fn));
Zoomez ou dé-zoomez l'exemple avec la commande ci-dessous :

Simple, non ?

concatMap est donc une fonction qui accepte une fonction comme seul argument (fn), et retourne une fonction qui acceptera ensuite un tableau - c'est ce qu'on appelle le currying.

C'est très pratique de mettre l'argument sur lequel on va appliquer la transformation en dernière position notamment parce que ça permet de composer facilement les fonctions. J'en reparlerai sans doute plus tard.

© François-Marie de Jouvencel
fm.de.jouvencel@gmail.com