A boolean flag argument is a code smell — it means the function does two things.
// dirty
interface User { name: string; role: string; permissions: string[]; }
function createUser(name: string, isAdmin: boolean): User {
if (isAdmin) {
return { name, role: 'admin', permissions: ['read', 'write', 'delete'] };
}
return { name, role: 'user', permissions: ['read'] };
}Split this into two functions: createUser(name) and createAdminUser(name). Then solve(name, type) dispatches to the right one — no boolean flag.
solve('Alice', 'createUser') → { name: 'Alice', role: 'user', permissions: ['read'] }solve('Bob', 'createAdminUser') → { name: 'Bob', role: 'admin', permissions: ['read', 'write', 'delete'] }
Sample tests