En aquest tema, explorarem els tipus avançats de TypeScript, que et permetran escriure codi més flexible, robust i mantenible. Aquests tipus són especialment útils quan treballes en projectes complexos o quan necessites definir estructures de dades més sofisticades.

  1. Tipus Unió i Intersecció

Tipus Unió

Els tipus unió permeten que una variable pugui tenir més d'un tipus. Això és útil quan una variable pot tenir valors de diferents tipus.

let id: number | string;
id = 101; // Correcte
id = "202"; // Correcte
// id = true; // Error: 'boolean' no és assignable a 'number | string'

Tipus Intersecció

Els tipus intersecció combinen múltiples tipus en un sol tipus. Això és útil quan vols combinar les propietats de diversos tipus.

interface Person {
  name: string;
}

interface Employee {
  employeeId: number;
}

type EmployeePerson = Person & Employee;

const emp: EmployeePerson = {
  name: "John",
  employeeId: 1234
};

  1. Tipus Condicionals

Els tipus condicionals permeten definir tipus basats en una condició. Són similars a les expressions condicionals en JavaScript.

type IsString<T> = T extends string ? "Yes" : "No";

type Test1 = IsString<string>; // "Yes"
type Test2 = IsString<number>; // "No"

  1. Tipus Mapejats

Els tipus mapejats permeten crear nous tipus transformant les propietats d'un tipus existent.

type Readonly<T> = {
  readonly [P in keyof T]: T[P];
};

interface User {
  name: string;
  age: number;
}

const user: Readonly<User> = {
  name: "Alice",
  age: 30
};

// user.age = 31; // Error: no es pot assignar a 'age' perquè és una propietat de només lectura.

  1. Tipus Indexats

Els tipus indexats permeten accedir a les propietats d'un tipus utilitzant una sintaxi d'índex.

interface Car {
  make: string;
  model: string;
  year: number;
}

type CarKeys = keyof Car; // "make" | "model" | "year"
type CarMake = Car["make"]; // string

  1. Tipus de Plantilla de Lletres

Els tipus de plantilla de lletres permeten crear tipus basats en cadenes literals.

type EventName = "click" | "mouseover" | "keydown";

function handleEvent(event: EventName) {
  console.log(`Handling ${event} event`);
}

handleEvent("click"); // Correcte
// handleEvent("submit"); // Error: 'submit' no és assignable a 'EventName'

Exercicis Pràctics

Exercici 1: Tipus Unió i Intersecció

Defineix un tipus unió per a una variable que pugui ser un número o una cadena. Després, crea un tipus intersecció que combini les propietats de dos tipus d'interfície.

Exercici 2: Tipus Condicionals

Crea un tipus condicional que determini si un tipus és un array o no.

Exercici 3: Tipus Mapejats

Defineix un tipus mapejat que faci que totes les propietats d'un tipus d'interfície siguin opcionals.

Solucions

Solució Exercici 1

type NumberOrString = number | string;

interface A {
  propA: string;
}

interface B {
  propB: number;
}

type AandB = A & B;

const example: AandB = {
  propA: "Hello",
  propB: 42
};

Solució Exercici 2

type IsArray<T> = T extends any[] ? "Array" : "Not Array";

type TestArray1 = IsArray<number[]>; // "Array"
type TestArray2 = IsArray<string>; // "Not Array"

Solució Exercici 3

type Partial<T> = {
  [P in keyof T]?: T[P];
};

interface Product {
  id: number;
  name: string;
}

type OptionalProduct = Partial<Product>;

const product: OptionalProduct = {
  id: 1
};

Conclusió

Els tipus avançats de TypeScript et permeten escriure codi més flexible i robust, adaptant-se a les necessitats específiques del teu projecte. A mesura que et familiaritzis amb aquests conceptes, podràs aprofitar al màxim les capacitats de TypeScript per crear aplicacions més segures i mantenibles. En el següent tema, explorarem els decoradors de TypeScript, una altra eina poderosa per millorar el teu codi.

Dramaturg amb TypeScript: De Principiant a Avançat

Mòdul 1: Introducció a Playwright i TypeScript

Mòdul 2: Començant amb Playwright

Mòdul 3: Fonaments de Playwright i TypeScript

Mòdul 4: Funcions Avançades de Playwright

Mòdul 5: Estratègies d'Automatització de Proves

Mòdul 6: Tècniques Avançades de TypeScript

Mòdul 7: Aplicacions Reals de Playwright

Mòdul 8: Conclusió del Curs i Propers Passos

© Copyright 2024. Tots els drets reservats