A mapped type can turn every property of one shape into a boolean flag.

Mapped Feature Flags

feature_flags.ts
type Profile = {
    name: string;
    email: string;
    theme: string;
};

type FeatureFlags<T> = {
    [K in keyof T]: boolean;
};

function countEnabled(flags: FeatureFlags<Profile>): string {
    const enabled: string[] = Object.keys(flags).filter((key) => flags[key as keyof Profile]);
    return `${enabled.length}:${enabled.join(",")}`;
}

const emailEnabled: boolean = ;
const flags: FeatureFlags<Profile> = {
    name: true,
    email: emailEnabled,
    theme: false,
};

console.log(countEnabled(flags));
type Profile = {
    name: string;
    email: string;
    theme: string;
};

type FeatureFlags<T> = {
    [K in keyof T]: boolean;
};

function countEnabled(flags: FeatureFlags<Profile>): string {
    const enabled: string[] = Object.keys(flags).filter((key) => flags[key as keyof Profile]);
    return `${enabled.length}:${enabled.join(",")}`;
}

const emailEnabled: boolean = ;
const flags: FeatureFlags<Profile> = {
    name: true,
    email: emailEnabled,
    theme: false,
};

console.log(countEnabled(flags));
mapped type `[K in keyof T]` visits each key of a type and creates a matching property in a new type.