Tipos primitivos en TypeScript

En esta clase empezamos a utilizar TypeScript sin instalar nada extraño. Simplemente creando un archivo .ts en un editor como Visual Studio Code, ya obtenemos validaciones, inferencia de tipos y autocompletado avanzado.

De hecho, Visual Studio Code está construido en un 95% con TypeScript, y eso explica por qué el soporte viene prácticamente “de serie”.

TypeScript funciona desde el primer momento

No necesitamos configuración especial para empezar.

Creamos un archivo como:

const nombre = 'midudev'

Sin añadir ningún tipo explícito, TypeScript ya ha inferido que:

  • Si usamos const, el tipo es el literal exacto 'midudev'
  • Si usamos let, el tipo será más general, es decir string

A esto se le llama inferencia de tipos.

¿Qué es la inferencia?

TypeScript “adivina” el tipo basándose en el valor asignado.

Ejemplo:

let nombre = 'midudev'

Aquí el tipo es string. Si intentamos hacer esto:

nombre = 123 // Error: el tipo 'number' no es asignable a 'string'

Obtendremos un error porque el tipo number no es asignable a string.

Lo mismo ocurre con operaciones inválidas:

nombre * 2 // Error

Y gracias a esto, el editor nos ofrece autocompletado inteligente según el tipo detectado.

Tipos primitivos en TypeScript

string

Cadenas de texto normales, template strings e incluso strings vacíos:

let saludo = `Hola ${nombre}`
let vacio = ''

number

Incluye:

  • Enteros → 30
  • Decimales → 19.99
  • Negativos → -10
  • Hexadecimales → 0x09f
  • Infinity

Todos son del tipo number.

boolean

let isActive: boolean

Solo puede aceptar true o false.

null y undefined

Son tipos diferentes.

let valor: undefined
let otro: null

No son intercambiables. Si una variable es undefined, no puede recibir null y viceversa.

Es una distinción importante y una fuente común de errores en JavaScript.

Union Types

¿Y si una variable puede ser más de una cosa?

Ejemplo típico:

let edad: number | null

Aquí edad puede ser:

  • Un number
  • O null

Pero nunca un string.

Los union types permiten modelar situaciones reales de forma mucho más precisa.

bigint

Para números extremadamente grandes:

let numeroGrande = 12345678901234567890n

Terminan con n y no son del tipo number, sino bigint.

symbol

Otro tipo primitivo:

let id: symbol = Symbol()

Se utiliza para crear valores únicos.

Diferencia clave: const vs let

Esta parte es fundamental.

const ciudad = 'Madrid'

Aquí el tipo de ciudad no es string, sino literalmente 'Madrid'.

¿Por qué? Porque una constante no puede reasignarse, así que TypeScript usa el tipo más específico posible.

En cambio:

let pais = 'España'

Aquí el tipo es string, porque pais podría cambiar más adelante.

Entender esta diferencia es clave para comprender cómo funciona la inferencia en TypeScript.

¿Por qué esto es tan potente?

Porque:

  • El editor te guía mientras escribes
  • Reduce errores antes de ejecutar el código
  • Mejora el autocompletado
  • Ayuda incluso a herramientas de IA a cometer menos errores

Lo que hemos visto

  • Inferencia automática de tipos
  • Tipos primitivos: string, number, boolean, null, undefined, bigint, symbol
  • Union types para variables que pueden ser más de un tipo
  • Diferencia entre const y let y cómo afecta a la inferencia

Y todo esto sin configurar nada especial.