Já teve que usar uniões discriminatórias e type guards? Quais type guards incorporados conhece?
sobes.tech IA
Resposta da IA
As uniões discriminadas (discriminated unions) e os guards de tipo são ferramentas poderosas do TypeScript para trabalhar com uniões de tipos, permitindo identificar de forma segura um tipo específico na união.
Uniões discriminadas são uniões de tipos onde cada tipo possui uma chave literal comum (por exemplo, o campo type), através da qual se pode identificar inequivocamente um tipo.
Guards de tipo são funções ou construções que verificam o tipo de uma variável em tempo de execução e restringem o tipo para o compilador.
Os guards de tipo integrados no TypeScript:
typeof— para tipos primitivos (string,number,boolean)instanceof— para verificar a pertença a uma classein— para verificar a existência de uma propriedade num objeto
Exemplo de uma união discriminada e um guard de tipo:
interface Quadrado {
kind: 'square';
size: number;
}
interface Círculo {
kind: 'circle';
radius: number;
}
type Forma = Quadrado | Círculo;
function área(forma: Forma): number {
switch (forma.kind) {
case 'square':
return forma.size * forma.size;
case 'circle':
return Math.PI * forma.radius ** 2;
}
}
Aqui, kind é o discriminador, e switch atua como um guard de tipo.
Utilização de guards de tipo integrados:
function éString(valor: unknown): valor é string {
return typeof valor === 'string';
}
if (éString(algumValor)) {
// aqui, algumValor é do tipo string
}