Intersection types combine requirements from multiple object types into one value.

Intersection Types

intersections.ts
type User = {
    name: string;
};

type AuditInfo = {
    role: string;
    active: boolean;
};

type AuditedUser = User & AuditInfo;

function summary(user: AuditedUser): string {
    const state: string = user.active ? "active" : "inactive";
    return `${user.name}:${user.role}:${state}`;
}

const active: boolean = ;
const user: AuditedUser = { name: "Ada", role: "admin", active: active };

console.log(summary(user));
type User = {
    name: string;
};

type AuditInfo = {
    role: string;
    active: boolean;
};

type AuditedUser = User & AuditInfo;

function summary(user: AuditedUser): string {
    const state: string = user.active ? "active" : "inactive";
    return `${user.name}:${user.role}:${state}`;
}

const active: boolean = ;
const user: AuditedUser = { name: "Ada", role: "admin", active: active };

console.log(summary(user));
intersection type An intersection type such as `User & AuditInfo` requires members from both types.