Propiedades
Diferentes formas de declarar y configurar variables dentro de una clase en TypeScript.
Sintaxis Básica
Con Valor por Defecto
Inicializas la propiedad directamente al declararla. Todos los objetos creados con new nacerán con este mismo valor inicial (que luego puedes cambiar).
typescriptclass Usuario {
rol: string = "cliente";
activo: boolean = true;
}
const u1 = new Usuario();
console.log(u1.rol); // "cliente"
Propiedad Opcional (?)
Le indicas a TypeScript que la propiedad no es obligatoria y que su valor inicial puede ser undefined.
typescriptclass Usuario {
telefono?: string; // Su tipo real es: string | undefined
}
const u1 = new Usuario();
console.log(u1.telefono); // undefined (no da error)
Asignación Definitiva / Promesa de Inicialización (!)
Se usa para decirle a TypeScript: "Confía en mí, esta propiedad NO tiene un valor inicial aquí ni en el constructor, pero se lo asignaré en otro método antes de usarla". Evita el error del modo estricto.
typescriptclass Usuario {
token!: string; // El signo ! evita errores de compilación
generarToken() {
this.token = "ABC-123";
}
}
De Solo Lectura con Valor Fijo (readonly)
Asignas un valor al declararla y nadie podrá modificarlo nunca, ni desde dentro ni desde fuera de la clase.
typescriptclass Usuario {
readonly tipoCuenta: string = "Gratuita";
}
const u1 = new Usuario();
// u1.tipoCuenta = "Premium"; ❌ Error: Es de solo lectura
Propiedad Estática (static)
La propiedad no pertenece a las instancias (los objetos que creas con new), sino a la clase misma.
typescriptclass Usuario {
static contadorGlobal: number = 0;
}
// Se usa directamente desde la clase, sin instanciar:
console.log(Usuario.contadorGlobal); // 0
Con Modificadores de Acceso (private, protected, #)
Puedes combinar cualquiera de las formas anteriores restringiendo quién puede ver o modificar la propiedad directamente:
typescriptclass Usuario {
public nombre: string = "Sin nombre"; // Acceso total
protected nivel: number = 1; // Acceso en la clase y sus hijas
private clave: string = "1234"; // Solo acceso interno (TypeScript)
#idSecreto: number = 999; // Campo privado nativo de JavaScript
}