10/19/2020

Vediamo oggi alcune utility a livello dei tipi che ci permettono di maneggiarne uno per ottenere i più svariati risultati. Il preset dell'interpo articolo è il seguente tipo che rappresenta una persona:

type Person = {
  name: string;
  age: number;
  work: {
    kind: string;
    RAL: number;
  };
};
La prima utility, Partial, ci permette di rendere tutti i field al primo livello di un oggetto opzionali:

type PartialPerson = Partial<Person>
// PartialPerson
{
    name?: string,
    age?: number,
    work?: {
        kind: string,
        RAL: number
    }
}
Questa utility esegue esattamente l'operazione inversa della precedente:

type Person = Required<PartialPerson>
// Person
{
    name: string,
    age: number,
    work: {
        kind: string,
        RAL: number
    }
}
Questa utility ci permette di rendere tutti i field al primo livello di un oggetto readonly:

type ReadonlyPerson = Readonly<Person>
// ReadonlyPerson
{
    readonly name: string,
    readonly age: number,
    readonly work: {
        kind: string,
        RAL: number
    }
}
Questa utility ci permette di estrarre un sottoinsieme delle proprietà al primo livello di un oggetto:

type PersonSubset = Pick<Person, "name" | "work">
// PersonSubset
{
    name: string,
    work: {
        kind: string,
        RAL: number
    }
}
Questa utility ci permette di eslcudere un sottoinsieme delle proprietà al primo livello di un oggetto:

type PersonSubset = Omit<Person, "name" | "work">;
// PersonSubset
{
  age: number;
}
Questo è un operatore particolare messo a disposizione solo da TypeScript perché opera a livello dei tipi, il quale permette di ricavare una union di tutte le proprietà al primo livello di un oggetto:

type PersonKeyOf = keyof Person;
// PersonKeyOf
"name" | "age" | "work";