Phantom Types

TypeScript 🔴 Senior

Definition

Types parametriques dont le parametre generique n'est pas utilise dans la structure mais sert de marqueur compile-time. Ajoutent de l'information de type sans cout runtime.

Analogie

Comme un tampon invisible sur un billet — l'oeil nu ne le voit pas mais le scanner le detecte.

Exemple de code

type Validated = { __validated: true };
type Raw = { __raw: true };
type Email<T> = string & { __phantom: T };
function validate(e: Email<Raw>): Email<Validated> {
  if (!e.includes("@")) throw Error("Invalid");
  return e as Email<Validated>;
}

Cas d'usage

Marquer les etapes de validation (raw -> sanitized -> validated) au niveau du systeme de types.

Termes lies

#advanced#pattern#safety