Anuncios

Bienvenidos sean a este post, hoy veremos otra opcion del configurador.

Anuncios

Esta opcion nos permite chequear que todas las propiedades en una clase esten iniciadas correctamente. Si bien es similar a strictNullChecks, del cual hablamos en este post, este tiene la particularidad de revisar dentro de las clases tambien. Para aplicarlo en un ejemplo primero generen primero el archivo tsconfig.json, esto lo pueden hacer mediante el comando tsc –init, y dentro de este busquen a strict y pasenlo a false. Lo siguiente es descomentar las siguientes lineas:

"strictNullChecks": true,
"strictPropertyInitialization": true,
Anuncios

Con esto habilitado pasemos al ejemplo, para ello analicemos el siguiente codigo:

class clase {
    a: number;
    b: string;
}
Anuncios

Esta es una clase simple donde declaramos dos propiedades sin ningun valor y si lo compilamos nos devolvera estos dos errores:

error TS2564: Property 'a' has no initializer and is not definitely assigned in the constructor.
error TS2564: Property 'b' has no initializer and is not definitely assigned in the constructor.
Anuncios

Tal como mencionamos al no estar iniciados nos lo notifica al compilarlo. Para solucionarlo podemos usar cuatro soluciones. La primera es la siguiente:

class clase {
    a: number | undefined;
    b: string | undefined;
}
Anuncios

Tal como mencionamos al momento de hablar sobre strictNullChecks una posibilidad es mediante la union de tipos y pasarle como tipo a undefined. Esto hara que el compilador sepa que la propiedad puede recibir el valor de undefined. La segunda opcion es la siguiente:

class clase {
    a: number = 0;
    b: string = "prueba";
}
Anuncios

En este caso lo que hacemos es asignarle un valor inicial pero como mencionamos tenemos una tercera opcion, veamos como es:

class clase {
    a!: number;
    b!: string;
}
Anuncios

En este caso aplicamos el operador de asignacion definida (!) el cual le informa al compilador que no realice ninguna verificacion y la ultima opcion es la siguiente:

class clase {
    a: number;
    b: string;
	constructor(_a: number, _b: string) {
		this.a = _a;
		this.b = _b;
	}
}	
Anuncios

En este caso mediante un constructor recibiremos el valor para cada una de las propiedades, por lo tanto el compilador ahora tambien considera que el valor sera asignado cuando corresponda.

Anuncios

Antes de finalizar les comento un detalle que mostre pero no mencione. Al momento de descomentar lo hicimos sobre dos lineas, strictNullChecks y strictPropertyInitialization, y esto es asi porque para hacer el chequeo la opcion de este post necesita de la anterior y esa es la razon que se debe habilitar.

Anuncios

En resumen, hoy hemos visto la opcion strictPropertyInitialization, que es, para que sirve, como se utiliza, algunos temas y como solucionarlo. Espero les haya sido de utilidad sigueme en tumblr, Twitter o Facebook para recibir una notificacion cada vez que subo un nuevo post en este blog, nos vemos en el proximo post.

Anuncios
pp258

Donación

Es para mantenimento del sitio, gracias!

$1.50