Advanced Type Patterns
Utility Types
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.