Phantom Types
TypeScript 🔴 SeniorDefinition
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.