TypeScriptLección 12 de 16

Guardas de tipo: typeof, in, instanceof

Una guarda de tipo es una comprobación tras la cual TypeScript conoce el tipo exacto de un valor. Hacen más falta con unknown y con datos que llegan de fuera.

Lo esencial

  • typeof sirve para primitivos: "string", "number", "boolean".
  • "meow" in pet comprueba si existe una propiedad y elige el miembro correcto de la unión.
  • instanceof funciona con clases: error instanceof ApiError.
  • El predicado value is Contact convierte una función de comprobación en una guarda de tipo.
  • filter con un predicado devuelve un array del tipo correcto, no unknown[].

Ejemplo

class ApiError {  constructor(public code: number) {}} interface Cat {  meow(): string;}interface Dog {  bark(): string;} function speak(pet: Cat | Dog): string {  return "meow" in pet ? pet.meow() : pet.bark(); // "in" narrows to Cat} function isText(value: unknown): value is string {  return typeof value === "string"; // a custom type predicate} function explain(error: unknown): string {  if (error instanceof ApiError) return `API error ${error.code}`;  if (isText(error)) return `Message: ${error}`;  return "Unknown error";} console.log(speak({ meow: () => "Meow!" }));console.log(explain(new ApiError(404)));console.log(explain("timeout"));console.log(explain(42));

explain acepta cualquier cosa, pero cada rama ya conoce el tipo: ApiError tiene code y el texto se puede insertar en la cadena. Sin el predicado isText, TypeScript no estrecharía unknown a string.

Tarea

Cómo usar el editor⌘ Enter o Ctrl Enter ejecuta el código, ⇧ ⌘ Enter comprueba la tarea.Tab y Mayús Tab sangran la línea o la selección; Esc y luego Tab sale del editor.La comprobación compara lo que imprimió el programa con la tarea; los espacios al final de línea no cuentan.Tras dos comprobaciones fallidas puedes ver la solución. Tu código se guarda en este navegador.

Convierte isContact en un predicado value is Contact con la comprobación completa, imprime cada contacto como «Ivan: 555-0101» y termina con «Valid: 2 of 5».

Salida

Aquí aparecerá lo que imprima el programa.