strictPropertyInitialization
en tsconfig.json
?
Cuando se establece "strictPropertyInitialization": true
en tsconfig.json
, TypeScript requiere que todas las propiedades de una clase sean inicializadas. Si no se asignan valores a las propiedades directamente o dentro del constructor, TypeScript generará un error. Esta opción es parte del modo estricto (strict
) y funciona en conjunto con strictNullChecks
, lo que garantiza que las propiedades no sean undefined
a menos que se defina explícitamente el tipo como undefined
.
strictPropertyInitialization
Para habilitar strictPropertyInitialization
, configura tsconfig.json
de la siguiente forma:
{
"compilerOptions": {
"strictPropertyInitialization": true
}
}
Con esta configuración, TypeScript obliga a inicializar todas las propiedades de las clases, asegurando que no se acceda a valores undefined
inesperados.
strictPropertyInitialization
class User {
name: string;
age: number;
constructor(name: string) {
this.name = name;
this.age = 30; // ✔️ Todas las propiedades se inicializan
}
}
let user = new User("Alice");
console.log(user.name); // "Alice"
console.log(user.age); // 30
En este ejemplo, TypeScript verifica que las propiedades name
y age
estén inicializadas antes de que se acceda a ellas. Si alguna de estas propiedades no se inicializara en el constructor, se generaría un error.
Para permitir que una propiedad se inicialice después, puede utilizarse el operador !
:
class User {
name!: string; // Permite retrasar la inicialización
age: number = 30;
}
let user = new User();
user.name = "Alice"; // ✔️ Se inicializa posteriormente
strictPropertyInitialization
1. Prevención de errores en tiempo de ejecución: Evita el acceso a propiedades no inicializadas, reduciendo la probabilidad de errores undefined
.
2. Seguridad y claridad en el código: Asegura que las propiedades tengan un valor inicial predefinido o claramente diferenciado como undefined
.
3. Mejora de la calidad del código: Facilita la comprensión y el mantenimiento al exigir inicializaciones claras.
Para más información sobre strictPropertyInitialization
y otras configuraciones avanzadas en TypeScript, visita la documentación oficial de TypeScript.
Jorge García
Fullstack developer