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

intersection type An intersection type such as `User & AuditInfo` requires members from both types.

Intersection Types

active
intersections.ts
Replay: real traced execution (multi-file project)
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 = true;
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 = false;
const user: AuditedUser = { name: "Ada", role: "admin", active: active };

console.log(summary(user));
  1. active ← true, user ← [object Object]

    14    return `${user.name}:${user.role}:${state}`;15}1617const active→ true: boolean = true;  //@active=false18const user→ [object Object]: AuditedUser = { name: "Ada", role: "admin", active: activetrue };1920console.log(summary(user[object Object]));
  2. state ← active

    10type AuditedUser = User & AuditInfo;1112function summary(user[object Object]: AuditedUser): string {13    const state→ active: string = user.activetrue ? "active" : "inactive";14    return `${user.nameAda}:${user.roleadmin}:${stateactive}`;15}
  3. console.log(summary(user));

    17const active: boolean = true;  //@active=false18const user: AuditedUser = { name: "Ada", role: "admin", active: active };1920console.log(summary(user[object Object]));
    outputAda:admin:active
  1. active ← false, user ← [object Object]

    14    return `${user.name}:${user.role}:${state}`;15}1617const active→ false: boolean = false;18const user→ [object Object]: AuditedUser = { name: "Ada", role: "admin", active: activefalse };1920console.log(summary(user[object Object]));
  2. state ← inactive

    10type AuditedUser = User & AuditInfo;1112function summary(user[object Object]: AuditedUser): string {13    const state→ inactive: string = user.activefalse ? "active" : "inactive";14    return `${user.nameAda}:${user.roleadmin}:${stateinactive}`;15}
  3. console.log(summary(user));

    17const active: boolean = false;18const user: AuditedUser = { name: "Ada", role: "admin", active: active };1920console.log(summary(user[object Object]));
    outputAda:admin:inactive