Optional chaining is a feature that allows you to access an object properties, read an array elements and call a method without a risk of causing a runtime error. Instead, if the object you are accessing is null or undefined, it will return undefined.
Optional chaining operator is ?.
Syntax
Object property
object?.property
Array element
array?.[index]
Method
method?.()
Example
interface Person {
name: {
firstName: string;
lastName: string;
fullName?: () => string;
};
age: number;
contact?: {
email: string;
phone?: string;
};
hobbies?: string[];
}
const personA: Person = {
name: {
firstName: 'Jan',
lastName: 'Kowalski',
fullName() {
return `${this.firstName} ${this.lastName}`;
},
},
age: 32,
contact: {
email: 'jkowalski@larago.pl',
phone: '123 456 789',
},
hobbies: ['programming'],
};
console.log(personA.name.fullName?.()); // Jan Kowalski
console.log(personA.contact?.phone); // 123 456 789
console.log(personA.hobbies?.[0]); // programming
const personB: Person = {
name: {
firstName: 'Adam',
lastName: 'Nowak',
},
age: 64,
};
console.log(personB.name.fullName?.()); // undefined
console.log(personB.contact?.phone); // undefined
console.log(personB.hobbies?.[0]); // undefined