Partial<Type>

Crée un type dans lequel toutes les propriétés sont optionnelles.

Sur cette page

Exemple

#
TypeScript
interface User {
  id: number
  name: string
  email: string
}

function updateUser(user: User, changes: Partial<User>): User {
  return { ...user, ...changes }
}

const lea: User = { id: 1, name: 'Léa', email: 'lea@example.com' }
const updated = updateUser(lea, { email: 'lea@codeworlds.fr' })

console.log(updated)
Résultat
{ id: 1, name: 'Léa', email: 'lea@codeworlds.fr' }

Définition et utilisation

#

Partial<Type> prend un type d’objet existant et renvoie une copie dans laquelle chaque propriété a un point d’interrogation, c’est-à-dire qu’elle est optionnelle. Vous n’avez pas besoin de répéter une définition juste pour autoriser des données incomplètes.

C’est surtout utile pour les mises à jour : une fonction updateUser n’accepte que les champs qui changent, le reste restant inchangé. C’est pareil pour les formulaires remplis étape par étape, ou pour des paramètres par défaut remplacés par l’utilisateur.

Partial fonctionne de façon superficielle. Les objets imbriqués restent tels qu’ils étaient, donc leurs champs restent obligatoires.

Syntaxe

#
Syntaxe
type New = Partial<Type>

Paramètres de type

#
  • Type

    type d’objet

    Le type dont les propriétés doivent devenir optionnelles.

Plus d’exemples

#
Le type résultant
TypeScript
type UserDraft = Partial<User>
// type UserDraft = {
//   id?: number
//   name?: string
//   email?: string
// }

const draft: UserDraft = { name: 'Lucas' } // correct
const empty: UserDraft = {} // également correct
Des paramètres avec des valeurs par défaut
TypeScript
interface Settings {
  theme: 'dark' | 'light'
  fontSize: number
  sounds: boolean
}

const defaults: Settings = { theme: 'dark', fontSize: 16, sounds: true }

function createSettings(overrides: Partial<Settings>): Settings {
  return { ...defaults, ...overrides }
}

console.log(createSettings({ sounds: false }))
Résultat
{ theme: 'dark', fontSize: 16, sounds: false }

Bonnes pratiques

#
  • Quand vous avez besoin de l’inverse, c’est-à-dire rendre tous les champs obligatoires, utilisez Required<Type>.
  • Si seuls certains champs doivent être optionnels, combinez les types : Omit<User, "email"> & Partial<Pick<User, "email">>.

Entrées associées

#

Vous voyez une erreur ou il manque un exemple ? Écrivez-nous.