Utility types transform existing object types into useful variations.

Utility Types

utility.ts
type Profile = {
    name: string;
    city: string;
    lessons: number;
};

function updateProfile(profile: Readonly<Profile>, changes: Partial<Pick<Profile, "city" | "lessons">>): Profile {
    return {
        name: profile.name,
        city: changes.city ?? profile.city,
        lessons: changes.lessons ?? profile.lessons,
    };
}

const newLessons: number = ;
const base: Readonly<Profile> = { name: "Ada", city: "London", lessons: 2 };
const updated: Profile = updateProfile(base, { lessons: newLessons });

console.log(`${updated.name}:${updated.city}:${updated.lessons}`);
type Profile = {
    name: string;
    city: string;
    lessons: number;
};

function updateProfile(profile: Readonly<Profile>, changes: Partial<Pick<Profile, "city" | "lessons">>): Profile {
    return {
        name: profile.name,
        city: changes.city ?? profile.city,
        lessons: changes.lessons ?? profile.lessons,
    };
}

const newLessons: number = ;
const base: Readonly<Profile> = { name: "Ada", city: "London", lessons: 2 };
const updated: Profile = updateProfile(base, { lessons: newLessons });

console.log(`${updated.name}:${updated.city}:${updated.lessons}`);
type Profile = {
    name: string;
    city: string;
    lessons: number;
};

function updateProfile(profile: Readonly<Profile>, changes: Partial<Pick<Profile, "city" | "lessons">>): Profile {
    return {
        name: profile.name,
        city: changes.city ?? profile.city,
        lessons: changes.lessons ?? profile.lessons,
    };
}

const newLessons: number = ;
const base: Readonly<Profile> = { name: "Ada", city: "London", lessons: 2 };
const updated: Profile = updateProfile(base, { lessons: newLessons });

console.log(`${updated.name}:${updated.city}:${updated.lessons}`);
utility type A utility type such as `Partial<T>`, `Pick<T>`, or `Readonly<T>` builds a new type from another type.