Condicionais a partir de parâmetros
A função pode receber mais de um tipo por parâmetro.
Apenas acrescentando uma condição no parâmetro, definindo assim os possíveis tipos que a função pode receber.
Isso evita a duplicação de código.
interface IUser {
name: string;
email: string;
}
interface IAdmin extends IUser {
role: 'gerente' | 'supervisor' | 'coordenador';
}
const user: IUser = {
name: 'Heviane',
email: 'heviane@gmail.com'
}
const admin: IAdmin = {
name: 'Pedro',
email: 'pedro@gmail.com',
role: 'gerente',
}
function redirect(user: IUser | IAdmin){
// if(user.role === 'gerente'){ // ERRO = role não existe em IUser
if('role' in user){ // OK
console.log('Usuário admin: ' + user.name + ', role: ' + user.role);
} else {
console.log('Usuário comum: ' + user.name);
}
}
redirect(user);
redirect(admin);