Documentation développeur
TypeScript
Mis à jour le 18 septembre 2026

Générer un UUID en TypeScript

Générez, validez et analysez des UUID RFC 4122/9562 en TypeScript avec des types nominaux sécurisés et des gardes de type.

TypeScript apporte une sécurité de typage statique indispensable à la manipulation des UUID. En combinant l'API standard Web Crypto avec des types nominaux (branded types) et des gardes de types à l'exécution, vous éliminez les inversions accidentelles d'identifiants entre vos fonctions.

Démarrage rapide#

L'API native Web Crypto retourne directement une chaîne typée :

TypeScript
1// TypeScript moderne sans dépendance2const id: string = crypto.randomUUID();34console.log(id);5// Résultat : "f47ac10b-58cc-4372-a567-0e02b2c3d479"

Créer des types nominaux (Branded Types)#

Dans les architectures volumineuses, typer tous les identifiants en simple string conduit fréquemment à inverser deux paramètres lors d'appels de méthodes :

TypeScript
1// Définition de types nominaux stricts2export type UUID = string & { readonly __brand: unique symbol };3export type UserId = UUID & { readonly __userBrand: unique symbol };4export type OrderId = UUID & { readonly __orderBrand: unique symbol };56// Fonction de conversion avec contrôle à l'exécution7export function asUUID(valeur: string): UUID {8  if (!isValidUUID(valeur)) {9    throw new TypeError(`Format UUID invalide : "${valeur}"`);10  }11  return valeur as UUID;12}1314// Signature prévenant l'inversion des identifiants15function traiterCommande(utilisateurId: UserId, commandeId: OrderId): void {16  console.log(`Commande ${commandeId} pour lutilisateur ${utilisateurId}`);17}

Gardes de type (Type Guards) à l'exécution#

Utilisez un prédicat de type TypeScript pour affiner les chaînes non typées issues d'API HTTP :

TypeScript
1const UUID_REGEX =2  /^[--f]{}-[--f]{}-[-][--f]{}-[][--f]{}-[--f]{}$/i;34export function isValidUUID(val: unknown): val is UUID {5  return typeof val === "string" && UUID_REGEX.test(val);6}78// Utilisation dans un contrôleur ou gestionnaire de requête9function gererRequete(identifiantBrut: string) {10  if (isValidUUID(identifiantBrut)) {11    // identifiantBrut est maintenant garanti de type UUID12    chargerEntite(identifiantBrut);13  } else {14    throw new Error("Paramètre UUID invalide");15  }16}

Le paquet uuid avec TypeScript#

Les types TypeScript officiels sont inclus directement dans le paquet uuid moderne :

Bash
1npm install uuid
TypeScript
1import { v4 as uuidv4, v7 as uuidv7, validate as validateUuid } from "uuid";23// UUID v4 aléatoire4const sessionToken: string = uuidv4();56// UUID v7 ordonné par le temps7const recordId: string = uuidv7();89// Vérification de validité10const estValide: boolean = validateUuid(recordId);

Bonnes pratiques#

  1. Employez les types nominaux (Branded types) : Empêche les inversions d'arguments dans la couche domaine.
  2. Validez aux frontières d'entrée : Validez toujours les paramètres bruts avant de les transtyper en UUID.
  3. Passez à l'UUID v7 pour les clés SQL : Offre d'excellentes performances d'insertion séquentielle dans les index B-Tree.

Références#

Implémenter UUID dans d'autres langages :