Menu

Tipos en TypeScript: string, number, boolean y más

Los tipos integrados de TypeScript: string, number, boolean, bigint, symbol, null y undefined, más un vistazo a arrays y objetos. Cómo escribir una anotación de tipo, por qué no existe un tipo entero y por qué se escribe string y no String.

Esta página incluye editores ejecutables: edita, ejecuta y ve el resultado al instante.

Los tipos de TypeScript describen qué clase de valor puede contener una variable. Escribes el tipo después de dos puntos, let name: string, y el compilador rechaza cualquier código que meta ahí un valor del tipo equivocado. Los tipos básicos son los siete primitivos de JavaScript más los tipos objeto para arrays y objetos.

Las anotaciones se comprueban en tiempo de compilación y después se eliminan. El programa que se ejecuta es JavaScript normal.

Los tipos primitivos

TipoValores de ejemploNotas
string"hi", 'hi', `hi ${name}`Texto. Los tres estilos de comillas tienen el mismo tipo.
number42, 3.14, -0.5, NaN, InfinityCualquier número, entero o no. No existe int ni float.
booleantrue, falseSolo estos dos valores.
bigint10n, BigInt(10)Enteros de cualquier tamaño. Requiere target ES2020 o posterior.
symbolSymbol("id")Un valor único, usado sobre todo como clave de objeto.
nullnull«Vacío a propósito».
undefinedundefined«Sin asignar». También es lo que devuelve una propiedad que no existe.

Los nombres de los tipos van en minúsculas. typeof en tiempo de ejecución devuelve las mismas palabras para la mayoría, así que typeof x === "number" es la forma de comprobar el tipo primitivo de un valor mientras el programa se ejecuta.

Anotaciones de tipo

Una anotación es : Type después de una variable, de un parámetro o de la lista de parámetros de una función. Los parámetros son donde más importan, porque TypeScript no puede adivinar qué pasará quien llame a la función.

Cuando una variable se inicializa en la misma línea, la anotación suele sobrar: let count = 10 ya tiene tipo number. Las reglas para omitir tipos están en la página de inferencia de tipos.

Un tipo incorrecto es un error de compilación

Asigna un valor del tipo equivocado y el compilador se detiene antes de ejecutar nada:

El compilador muestra:

index.ts(3,1): error TS2322: Type 'string' is not assignable to type 'number'.

La solución es convertir el valor, port = Number("3000"), o cambiar la anotación si la variable de verdad debe guardar texto.

number: no existe un tipo entero

JavaScript guarda todos los números como valores de coma flotante de 64 bits, así que TypeScript tiene un único tipo number. Los enteros son exactos hasta Number.MAX_SAFE_INTEGER (2 ** 53 - 1). A partir de ahí, usa bigint.

bigint y number no se mezclan: exact + 1 es un error de compilación (TS2365: Operator '+' cannot be applied to types 'bigint' and '1'., donde '1' es el tipo literal del 1) y, si llegara a ejecutarse, también un TypeError en tiempo de ejecución. Convierte uno de los lados de forma explícita con BigInt(1) o Number(exact), sabiendo que Number redondea los valores que superan el rango seguro.

Si quieres un tipo que solo acepte números enteros, TypeScript no puede expresarlo para valores arbitrarios. Valida con Number.isInteger en el punto donde el valor entra en tu programa.

boolean

boolean tiene exactamente dos valores, true y false. Los valores que solo son truthy (1, "yes") no son booleanos, así que conviértelos con Boolean(x) o x !== 0.

null y undefined

Con strict activado (el valor por defecto desde TypeScript 6.0), null y undefined son tipos separados y no forman parte de string, number ni de ningún otro tipo. Una variable que puede estar vacía lo indica con una unión:

Leer una propiedad de un valor que podría ser undefined es un error de compilación hasta que lo compruebas. La página de null y undefined explica las comprobaciones, ?. y ??.

Arrays y objetos de un vistazo

Todo lo que no es primitivo es un tipo objeto. Las tres formas que encontrarás primero:

let tags: string[] = ["ts", "js"];               // array of strings
let point: { x: number; y: number } = { x: 1, y: 2 }; // object with two number properties
let greet: (name: string) => string = (n) => `hi ${n}`; // function type

Cada una tiene su propia página: arrays, tuplas (arrays de longitud fija), tipos objeto y tipos de función.

string, number, boolean frente a String, Number, Boolean

Los nombres con mayúscula son los tipos de los objetos envoltorio de JavaScript (new String("x")), no de los valores normales. Anota con los nombres en minúscula.

index.ts(3,7): error TS2322: Type 'String' is not assignable to type 'string'.
  'string' is a primitive, but 'String' is a wrapper object. Prefer using 'string' when possible.

Cambia String por string en la primera línea y el bloque se ejecuta. Lo mismo vale para Number, Boolean, Symbol y BigInt. (Object es un caso distinto: acepta casi cualquier valor, primitivos incluidos; consulta los tipos objeto).

Otros tipos integrados

Hay algunos tipos más que aparecen pronto. Cada uno tiene su propia página.

TipoSignificado
anyDesactiva la comprobación para ese valor. Evítalo.
unknownCualquier valor, pero debes comprobarlo antes de usarlo.
voidUna función no devuelve nada útil.
neverNingún valor: una función que siempre lanza, o un caso imposible.
objectCualquier valor no primitivo.
"red" | "green"Un tipo literal: solo estos valores exactos.

Preguntas frecuentes

¿TypeScript tiene un tipo entero?

No. number cubre enteros y decimales por igual, porque JavaScript guarda todos los números como flotantes de 64 bits. Comprueba si un número es entero en tiempo de ejecución con Number.isInteger(n), y usa bigint (10n) cuando necesites enteros mayores que Number.MAX_SAFE_INTEGER (2 ** 53 - 1) sin perder precisión.

¿Qué diferencia hay entre string y String en TypeScript?

string es el tipo primitivo, el que tienen los literales de cadena y las template strings. String es el tipo del objeto envoltorio que crea new String("x"). Anota siempre con las minúsculas string, number y boolean; asignar un String a un string es un error de compilación (TS2322).

¿Cuáles son los tipos primitivos de TypeScript?

Los mismos siete que en JavaScript: string, number, boolean, bigint, symbol, null y undefined. Todo lo demás (arrays, objetos, funciones, instancias de clases) es un tipo objeto.

¿Cómo se declara una variable con tipo en TypeScript?

Pon dos puntos y el tipo después del nombre: let count: number = 0;. En una función, anota cada parámetro y, si quieres, el tipo de retorno: function add(a: number, b: number): number. Cuando la variable se inicializa, normalmente puedes omitir la anotación y dejar que TypeScript infiera el tipo.

¿Los tipos de TypeScript existen en tiempo de ejecución?

No. El compilador comprueba los tipos y luego los elimina, así que el JavaScript que se ejecuta no tiene anotaciones. En tiempo de ejecución compruebas los valores con operadores de JavaScript como typeof, Array.isArray e instanceof.

Coddy programming languages illustration

Aprende a programar con Coddy

COMENZAR