Typescript Exercise 3
Exercise 3
Fix type errors in logPerson function.
logPerson function should accept both User and Admin and should output relevant information according to the
input: occupation
for User and role for Admin.
interface User {
name: string;
age: number;
occupation: string;
}
interface Admin {
name: string;
age: number;
role: string;
}
export type Person = User | Admin;
export const persons: Person[] = [
{
name: 'Max Mustermann',
age: 25,
occupation: 'Chimney sweep',
},
{
name: 'Jane Doe',
age: 32,
role: 'Administrator',
},
{
name: 'Kate Müller',
age: 23,
occupation: 'Astronaut',
},
{
name: 'Bruce Willis',
age: 64,
role: 'World saver',
},
];
export function logPerson(person: Person) {
let additionalInformation: string;
if (person.role) {
additionalInformation = person.role;
} else {
additionalInformation = person.occupation;
}
console.log(` - ${person.name}, ${person.age}, ${additionalInformation}`);
}
persons.forEach(logPerson);
How I Solved This Problem
We are facing Type Error which is saying property role
does not exist on type Person
Since passed parameter person
might not have property role
,
given condition person.role === true
does not always make sense.
if (person.role) {
additionalInformation = person.role;
} else {
additionalInformation = person.occupation;
}
Rather than using dot notation
to access an object passed as a parameter, it is recommended to use the in operator
to check if a property exists in the object, ensuring that the condition is true
.
like below
if ('role' in person) {
additionalInformation = person.role;
} else {
additionalInformation = person.occupation;
}