Types génériques

Génériques

Type générique

Fonction générique

Interface générique

Classe générique


Contraintes sur un type générique


Types mappés


Types utilitaires

Typescript définit nativement des types mappés utiles pour simplifier la création de type:

Readonly<T>

Rend toutes les propriétés de T readonly.
Les exemples suivants sont tous équivalents:

type TodoReadonly = {
  readonly id: number
  readonly text: string
  readonly done: boolean
}
type TodoReadonly = Readonly<{
  id: number
  text: string
  done: boolean
}>
type Todo = {
  id: number
  text: string
  done: boolean
}>
type TodoReadonly = Readonly<Todo>

Partial<T>

Rend toutes les propriétés de T optionnelles

type TodoOpt = Partial<{
  id: number
  text: string
  done: boolean
}>

Required<T>

Rend toutes les propriétés de T obligatoires

type Todo = Required<TodoOpt>

Pick<T, K>

Définit un type ayant pour toute propriété la propriété K de T

interface Person {
  id: number
  firstName: string
  lastName: string,
  address: string
}

function showType(args: Pick<Person, "firstName" | "lastName">) {
  console.log(args)
}
showType({ firstName: "John", lastName: "Doe" })
// Output: {firstName: "John"}

Omit<T, K>

Définit un type ayant toutes les propiétés de T sauf K.

interface Person {
  id: number
  firstName: string
  lastName: string,
  address: string
}

function showType(args: Omit<Person, "address">) {
  console.log(args)
}

Extract<U, V>

Prend les propriétés communes aux deux ensembles

interface FirstType {
  id: number
  firstName: string
  lastName: string
}

interface SecondType {
  id: number
  address: string
  city: string
}

type ExtractType = Extract<keyof FirstType, keyof SecondType>
// Output: "id"

Exclude<U, V>

Exclut les propriétés U présentes dans V

interface FirstType {
  id: number
  firstName: string
  lastName: string
}

interface SecondType {
  id: number
  address: string
  city: string
}

type ExcludeType = Exclude<keyof FirstType, keyof SecondType>
// Output; "firstName" | "lastName"

Record<K,T>

Crée un tableau associatif ayant le type K pour clé et le type T pour valeur.

interface EmployeeType {
  id: number
  fullname: string
  role: string
}

let employees: Record<number, EmployeeType> = {
  0: { id: 1, fullname: "John Doe", role: "Designer" },
  1: { id: 2, fullname: "Ibrahima Fall", role: "Developer" },
  2: { id: 3, fullname: "Sara Duckson", role: "Developer" },
}

NonNullable<T>

Enlève null et undefined du type T

type NonNullableType = string | number | null | undefined

function showType(args: NonNullable<NonNullableType>) {
  console.log(args)
}