Estoy convirtiendo el form value
en un object
que se pasa a la API después de un poco de lógica. Pero cuando convierto las propiedades que no se muestran en la interfaz de usuario en una validación, establece su valor predeterminado en empty
, incluso si el tipo de datos es number
, boolean
o date
.
//Clase:
export class Detail{ id: number; address: string; active: boolean; statusId: number; public constructor(init?: Partial<Detail>) { Object.assign(this, init); } }
//Componente:
let detail = new Detail(this.DetailForm.value); console.log(detail)
donde en una condición, el campo active
y statusId
está oculto y el usuario simplemente selecciona la id
y escribe la address
.
//en el registro de la consola esto da
id:5 address: 'abc xyz' active: '' statusId: ''
//Salida esperada: espero que cuando la propiedad no esté configurada, debería tener su valor predeterminado.
id:5 address: 'abc xyz' active: false statusId: 0
//Intentó:
Establezca el valor predeterminado en la clase de propiedad active: boolean = false
Establezca el valor predeterminado en la clase en el constructor.
init.activo = init.activo ?? falso; init.statusId = init.statusId ?? 0; Objeto.assign(este, init);
Después de Object.assign
, volvió a estar empty
Cualquier idea para manejar este problema para todos los tipos de datos (como la date
también).
Yo usaría el operador nulo:
public constructor(init?: Partial<Detail>) { init.active = init.active ?? false; init.statusId = init.statusId ?? 0; Object.assign(this, init); }
No estoy seguro si me estoy perdiendo algo aquí, pero esto funcionó para mí.
export class Detail { id: number = 5; address: string = "abc xyz"; active: boolean = false; statusId: number = 0; public constructor(init?: Partial<Detail>) { Object.assign(this, init); } } const test1 = new Detail({ id: 3}) const test2 = new Detail(); const test3 = new Detail({id: 3, statusId: 4, address: "my-address"}); console.log(test1); console.log(test2); console.log(test3);
Rendimiento esperado:
Detail { id: 3, address: 'abc xyz', active: false, statusId: 0 } Detail { id: 5, address: 'abc xyz', active: false, statusId: 0 } Detail { id: 3, address: 'my-address', active: false, statusId: 4 }
Dado que los valores son cadenas empty
(no nulas/indefinidas), puede usar OR ||
operador en lugar de nulo ??
, como el siguiente:
public constructor(init?: Partial<Detail>) { init.active = init.active || false; init.statusId = init.statusId || 0; Object.assign(this, init); }