Mapped Types
Mapped Feature Flags
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.