Optional Chaining
O encadeamento opcional alcançou o consenso de estágio 3 no TC39
durante o desenvolvimento da versão 3.7. Encadeamento opcional
permite você escrever um código que pode interromper imediatamente
a execução de expressões quando atingir um valor null ou undefined.
Acesso à Propriedade
Vamos imaginar que temos um álbum onde o artista e a
biografia do artista podem não estar presentes nos dados.
Por exemplo, uma lista pode não ter um único artista.
// Com encadeamento opcional você pode escrever
código como esse:
type AlbumAPIResponse = {
title: string;
artist?: {
name: string;
bio?: string;
previousAlbums?: string[];
};
};
declare const album: AlbumAPIResponse;
// Nessa caso ?. age diferente que o && já que o && agirá
diferente em valores falsy (ex.: uma string vazia,
0, NaN, e false).
Encadeamento opcional apenas considerá null ou
undefined como sinal de parada e retornará um undefined.
Acesso a Elemento Opcional
Acesso à Propriedade é através do operador ., o encadeamento
opcional também funciona com os operadores [] quando acessa
elementos.
const artistBio = album?.artist?.bio;
// Ao invés desse:
const maybeArtistBio = album.artist && album.artist.bio;
// Ao lidar com funções que podem ou não existir em tempo de execução,
o encadeamento opcional suporta apenas a chamada de uma função
se ela existir. Isso pode substituir o código onde você
tradicionalmente escreveria algo como: if (func) func()
Por exemplo, aqui está uma chamada opcional para o callback
de uma requisição API:
const maybeArtistBioElement = album?.["artist"]?.["bio"];
const maybeFirstPreviousAlbum = album?.artist?.previousAlbums?.[0];
// Chamadas opcionais
// Você pode ler mais sobre encadeamento opcional no post da versão 3.7
https://devblogs.microsoft.com/typescript/announcing-typescript-3-7/
const callUpdateMetadata = (metadata: any) => Promise.resolve(metadata); // Falsa chamada API
const updateAlbumMetadata = async (metadata: any, callback?: () => void) => {
await callUpdateMetadata(metadata);
callback?.();
};