TypeScript fournit une boîte à outils de types utilitaires, construits à partir des génériques, pour transformer un type existant plutôt que d'en réécrire un nouveau. Voici les plus utiles au quotidien.
Partial<T> — tout rendre optionnel
interface User {
id: number;
name: string;
email: string;
}
function updateUser(id: number, changes: Partial<User>) {
// changes peut ne contenir que { name: "..." } par exemple
}Pick<T, K> et Omit<T, K> — sélectionner ou exclure des champs
type UserPreview = Pick<User, "id" | "name">;
// { id: number; name: string }
type UserWithoutEmail = Omit<User, "email">;
// { id: number; name: string }Ces deux types évitent de maintenir deux interfaces qui divergent silencieusement : UserPreview reste toujours synchronisé avec User, même si on ajoute un champ plus tard.
Record<K, V> — typer un dictionnaire
type ServiceStatus = "up" | "down" | "degraded";
const statusColor: Record<ServiceStatus, string> = {
up: "green",
down: "red",
degraded: "orange",
};
// le compilateur signale immédiatement une clé manquante ou en tropReadonly<T> — verrouiller un objet
Readonly<T> rend chaque propriété en lecture seule, utile pour représenter un état immuable ou une configuration qui ne doit plus changer après son initialisation.
Le point commun de ces types : ils dérivent toujours d'une seule source de vérité. Moins de duplication, moins de désynchronisation entre types liés, et un compilateur qui rattrape les oublis à votre place.
