Skip to content

Tableaux ​

Typeflow n'a pas de boucles — le travail sur les tableaux se fait avec quatre constructions postfixes (distribution, [filtre], [index], ^(tri)) plus la projection et les fonctions d'agrégation.

OpérateurEffet
.distribuer un accès de propriété sur les éléments d'un tableau
[bool]conserver les éléments satisfaisant un prédicat booléen
[number]accéder à un élément par index
^(key)trier les éléments selon une ou plusieurs clés
count / sum / joinréduire un tableau à un scalaire

. : distribuer un accès de propriété sur les éléments d'un tableau ​

Accéder à une propriété sur un tableau d'objets distribue sur les éléments — labels.name sur { name: string }[] produit string[].

typeflow
names: user.labels.name

[bool] : conserver les éléments satisfaisant un prédicat booléen ​

Une expression booléenne entre crochets conserve les éléments correspondants. Entre les crochets, on est en portée d'élément : les identifiants nus se résolvent sur l'élément. Le prédicat doit être booléen — user.labels[name] est rejeté (TF2009).

typeflow
active: user.labels[active]
activeNames: user.labels[active].name

[number] : accéder à un élément par index ​

L'indexation produit element | undefined (le tableau peut être plus court), donc tout accès ultérieur nécessite ?..

typeflow
first: user.labels[0]
firstName: user.labels[0]?.name
firstOr: user.labels[0]?.name ?? "none"

^(key) : trier les éléments selon une ou plusieurs clés ​

Trie une copie du tableau selon chaque clé tour à tour. Les clés sont des expressions en portée d'élément ; préfixer une clé par > pour un tri descendant (< ou rien pour ascendant). Une clé doit être un number ou une string (TF2011) ; les clés nullish sont triées en dernier.

typeflow
alphabetical: user.labels^(name).name
bestFirst: user.labels^(>score, name)

count / sum / join : réduire un tableau à un scalaire ​

Voir Fonctions pour la liste complète des agrégats.

typeflow
games: count(stats.scores)
total: sum(stats.scores)
tagLine: join(stats.tags, ", ")

Playground ​

Mapping✔Playground ↗
JSON d'entrée
Sortie
{
  "games": 3,
  "total": 42,
  "tagLine": "math, pioneer"
}
type inféré{ games: number; total: number; tagLine: string }

Suite : Projection.

Publié sous licence MIT.