Introducción a TypeScript
Anotaciones de tipo, interfaces, genéricos y por qué TypeScript importa
Fundamentos de TypeScript
TypeScript es un superconjunto tipado de JavaScript que compila a JavaScript plano. Agrega tipado estático opcional y programación orientada a objetos basada en clases. TypeScript ayuda a detectar errores en tiempo de compilación.
¿Por qué TypeScript?
- Seguridad de Tipos — Detecta errores antes del tiempo de ejecución
- Mejor Soporte de IDE — Autocompletado, refactorización, navegación
- Auto-Documentado — Los tipos sirven como documentación en línea
- Refactorización — Cambios de código a gran escala más seguros
Tipos Básicos
// Tipos primitivos
let name: string = "Alice";
let age: number = 25;
let isActive: boolean = true;
// Arrays
let numbers: number[] = [1, 2, 3];
let names: Array<string> = ["Alice", "Bob"];
// Tuplas
let tuple: [string, number] = ["Alice", 25];
// Enum
enum Status {
Pending = "PENDING",
Active = "ACTIVE",
Completed = "COMPLETED"
}
// Unknown - any seguro
let input: unknown = getUserInput();
if (typeof input === "string") {
console.log(input.toUpperCase());
}
// Void - sin valor de retorno
function logMessage(message: string): void {
console.log(message);
}
Interfaces
interface User {
id: number;
name: string;
email: string;
age?: number; // Propiedad opcional
readonly createdAt: Date; // No se puede modificar
}
const user: User = {
id: 1,
name: "Alice",
email: "alice@example.com",
createdAt: new Date()
};
// Extender interfaces
interface AdminUser extends User {
role: "admin";
permissions: string[];
}
Genéricos
// Función genérica
function identity<T>(value: T): T {
return value;
}
const str = identity("hello"); // tipo: string
const num = identity(42); // tipo: number
// Interfaz genérica
interface ApiResponse<T> {
data: T;
status: number;
message: string;
}
// Restricciones genéricas
interface HasLength {
length: number;
}
function logLength<T extends HasLength>(item: T): void {
console.log(item.length);
}
logLength("hello"); // OK
logLength([1, 2, 3]); // OK
Tipos de Utilidad
type UserPreview = Pick<User, "id" | "name">;
type UserWithoutEmail = Omit<User, "email">;
type ReadonlyUser = Readonly<User>;
type PartialUser = Partial<User>;
type RequiredUser = Required<User>;
// Tipos union
type Status = "pending" | "active" | "completed";
// Guardas de tipo
function isAdmin(person: User | Admin): person is Admin {
return person.type === "admin";
}
💡 Primeros Pasos
- • Instalar:
npm install -D typescript - • Inicializar:
npx tsc --init - • Usa modo estricto para máxima seguridad de tipos
- • Comienza renombrando archivos .js a .ts
- • Agrega tipos incrementalmente, usa 'any' con moderación