Solución
solution.tsTypeScript
// Define aquí el tipo ApiResponse como union discriminada
// Una variante representa respuesta exitosa, la otra un error
type Sucess = {
kind: "success";
data: "string"
}
type Error = {
kind: "error";
message: "string"
}
type ApiResponse = Sucess | Error;
export function formatApiResponse(response: ApiResponse): string {
// Procesa la respuesta según su variante y retorna el mensaje formateado
// técnica: TYPE NARROWING - Reducción de tipos
// Reduce un tipo de unión a un tipo más específico dentro de un ámbito
// usando la propiedad 'kind' en este caso
// Nuestro guardian de tipo (Type Guard) usa la técnica de Reducción de tipos
// para estrechar el tipo (Type Narrowing)
switch(response.kind) {
case "success":
return `OK: ${response.data}`
break
case "error":
return `ERR: ${response.message}`
break
}
return "";
}
0respuestas