typestar

readonly e inmutabilidad en TypeScript

Arreglos y objetos readonly, y hasta dónde llega la garantía.

type Config = { theme: string; langs: string[] };

const frozen: Readonly<Config> = { theme: "dracula", langs: ["ts"] };
// frozen.theme = "x";        // error: readonly
frozen.langs.push("go");      // permitido: solo un nivel de profundidad

function total(values: readonly number[]): number {
  return values.reduce((sum, value) => sum + value, 0);
}

const scores: readonly number[] = [1, 2, 3];
// scores.push(4);            // error: no hay push en un arreglo readonly
console.log(total(scores), [...scores].reverse());

type DeepReadonly<T> = {
  readonly [K in keyof T]: T[K] extends object ? DeepReadonly<T[K]> : T[K];
};
const deep: DeepReadonly<Config> = { theme: "paper", langs: ["ts"] };
console.log(deep.langs.length, frozen.langs.length);

Cómo funciona

  1. readonly T[] no tiene push, pop ni sort.
  2. Readonly<T> congela un nivel, como el freeze del runtime.
  3. El chequeo en compilación desaparece detrás de un cast con as.

Palabras clave y builtins usados aquí

El intento, en números

Líneas
19
Caracteres a escribir
749
Tokens
188
Ritmo de tres estrellas
95 tpm

Al ritmo de tres estrellas de 95 tokens por minuto, este intento toma unos 119 segundos.

Escribe este fragmento

Paso 5 de 5 en Objetos e interfaces; paso 15 de 23 en Tipos y anotaciones.

← Anterior Siguiente →