Tengo una interfaz llamada IUser y uso strictNullChecks en la configuración de mecanografiado. Quiero usar una variable de IUser en la clase como a continuación:
class UserAccount { user: IUser; }El código anterior generará el error:
Property 'user' has no initializer and is not definitely assigned in the constructor.
Puedo arreglar esto con:
class UserAccount { user: IUser; constructor() { user = new User(); } } Pero desde una perspectiva de tiempo de ejecución, el user puede configurarse solo después de un tiempo después de que se completa la visualización. Hay una latencia para obtener los datos del user del servidor. La configuración del user se realiza a través de un observable RxJS que funciona solo de forma reactiva.
Qué tipo de inicialización puedo hacer para user para que pueda configurarse solo más tarde. Establecer user en null o undefined puede no ser correcto porque uso strictNullChecks y muestro la intención de que el objeto esté presente desde el principio. Pero un objeto válido para user no puede existir hasta que se complete la llamada al servidor.
*** ACTUALIZAR ****
Este es un ejemplo un poco mejor que el anterior:
export class AddPersonDialogComponent { selectedPerson1: IPersonForTypeahead; selectedPerson2: IPersonForTypeahead; selectedPerson3: IPersonForTypeahead; ... } A los 3 objetos de persona selectedPerson se les asignan valores cuando el usuario los selecciona de tres 3 menús desplegables en el cuadro de diálogo. Estas tres propiedades comienzan sin nada, pero si el usuario selecciona personas de un menú desplegable en el cuadro de diálogo, se establecen.
Puede hacer que su uso de UserAccount sea observable, como este:
userAccount$: Observable<UserAccount> = this.service.getUser().pipe( map(user => new UserAccount(user)) ); La idea aquí es no construir su cuenta de UserAccount hasta que tenga todos los datos necesarios para hacerlo. Esto va junto con su idea " Pero un objeto válido para el usuario no puede existir hasta que se complete la llamada al servidor ".